Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int INF = 2e9;
- int add(set<pair<int, int>> & st, int x) {
- auto it = st.insert(make_pair(x, 2)).first;
- int res = -1;
- if(prev(it)->second == 1 and next(it)->second == 3) {
- res = next(it)->first;
- if(next(next(it))->first == next(it)->first + 1) {
- st.erase(next(next(it)));
- st.erase(next(it));
- }
- else {
- st.insert(next(next(it)), make_pair(next(it)->first + 1, 3));
- st.erase(next(it));
- }
- st.erase(it);
- return res;
- }
- if(prev(it)->second == 3 and next(it)->second == 1) {
- res = x;
- st.insert(it, make_pair(res, 1));
- if(next(it)->first == x + 1) {
- st.erase(next(it));
- }
- else {
- st.insert(next(it), make_pair(x + 1, 3));
- }
- st.erase(it);
- return res;
- }
- }
- void remove(set<pair<int, int>> &st, int x) {
- auto it = st.lower_bound(make_pair(x, 2));
- it = prev(it);
- if(it->first == x) {
- if(next(it)->first == x + 1) {
- st.erase(next(it));
- st.erase(it);
- return;
- }
- else {
- st.insert(next(it), make_pair(x + 1, 1));
- st.erase(it);
- return;
- }
- }
- else {
- st.insert(next(it), make_pair(x + 1 , 1));
- st.insert(next(it), make_pair(x , 3));
- }
- }
- int main()
- {
- ios_base::sync_with_stdio(false);
- set<pair<int, int>> st;
- int n;
- cin >> n;
- st.insert(make_pair(0, 3));
- st.insert(make_pair(INF, 1));
- for(int i = 0; i < n; i++) {
- int t, code;
- cin >> t >> code;
- if(t == 1) {
- int res = add(st, code);
- cout << res << "\n";
- }
- else {
- remove(st, code);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement