diff --git a/2015/phase2/fila.cpp b/2015/phase2/fila.cpp index f3f054e..7e0332f 100644 --- a/2015/phase2/fila.cpp +++ b/2015/phase2/fila.cpp @@ -71,19 +71,17 @@ auto operator>>(istream &is, vector> &vec)->istream& { struct insertion { int pos; - int ind; int val; - insertion(int pos, int ind, int val): pos(pos), - ind(ind), - val(val) {} + insertion(int pos, int val): pos(pos), + val(val) {} - bool operator<(insertion &i) { - if (ind == i.ind) { - return ind == 0 ? pos < i.pos : pos > i.pos; - } - return ind < i.ind; - } + // bool operator<(insertion &i) { + // if (pos == i.pos) { + // return pos == 0 ? ind < i.pos : pos > i.pos; + // } + // return ind < i.ind; + // } }; struct query { @@ -153,40 +151,32 @@ int main() cin >> type >> pos >> value; queries[i] = query(type, pos, value); if (type == 0) { - inserts.emplace_back(i, pos, value); + inserts.emplace_back(pos, value); } } reverse(queries.begin(), queries.end()); - sort(inserts.begin(), inserts.end()); + reverse(inserts.begin(), inserts.end()); - vl act(n + inserts.size()); - size_t now = 0; - size_t q_itr = 0; - size_t i_itr = 0; - while (now < act.size() && q_itr < queue.size() && i_itr < inserts.size()) { - if (q_itr + 1 < inserts[i_itr].ind) { - act[now] = queue[q_itr]; - q_itr++; - } else { - act[now] = inserts[i_itr].val; - i_itr++; - } - now++; - } + vl act(n + inserts.size(), -1); + bit.assign(n + inserts.size() + 1, 0); + for (auto [p, v] : inserts) { - for (; q_itr < queue.size(); q_itr++, now++) { - act[now] = queue[q_itr]; - } - for (; i_itr < inserts.size(); i_itr++, now++) { - act[now] = inserts[i_itr].val; } + // size_t now = 0; + // for (size_t i = 0; i < act.size(); i++) { + // if (act[i] == -1) { + // act[i] = queue[now]; + // now++; + // } + // } size_t bef = act.size(); while (__builtin_popcount(act.size()) != 1) { act.push_back(-1); } size_t actn = act.size(); + cout << act; segtree.resize(act.size() * 2); bit.resize(act.size() + 1);