#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; int n, k1, k2; int myon(int x, int y){ if(x==n+1) return y; else if(y==0) return x; if(x-max(k1, k2)>min(k1, k2)-y || (k1>n>>k1>>k2; int q; cin>>q; ll a[100010], b[100010]; vector

v(2*q); for(int i=0; i>a[i]>>b[i]; } queue que2; int cnt=0; priority_queue, greater> que; for(int i=0; i<=q; i++){ while(!que.empty()){ ll x=que.top(); if(ia[i]) break; cnt--; que.pop(); if(!que2.empty()){ int j=que2.front(); que2.pop(); a[j]=x; cnt++; que.push(a[j]+b[j]); } } if(i==q) break; if(cnt st1, st2; bool used[100010]={}; for(int i=0; i<=n+1; i++){ st1.insert(i); st2.insert(i); } int ans[100010]; for(auto p:v){ int i=p.second; if(i>=q){ i-=q; int x, y; if(st1.size()==2){ auto itr2=st2.lower_bound(max(k1, k2)); x=*itr2; itr2--; y=*itr2; x=myon(x, y); }else{ auto itr=st1.lower_bound(max(k1, k2)); x=*itr; itr--; y=*itr; x=myon(x, y); } ans[i]=x; st2.erase(x); st1.erase(x); if(x>1) st1.erase(x-1); if(x0 && !used[x-1] && !used[x-2]) st1.insert(x-1); if(x+1<=n && !used[x+1] && !used[x+2]) st1.insert(x+1); if(!used[x-1] && !used[x+1]) st1.insert(x); } } for(int i=0; i