1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| #include<bits/stdc++.h> using namespace std; const int N=4e5+10; #define ls u<<1 #define rs u<<1|1 typedef pair<int,int>PII; int T,x,y,cnt,a[N],b[N],s[N*4]; string op; set<int>S[N*4]; struct Query{ string op; int x,y; }Q[N]; void pushup(int u){s[u]=max(s[ls],s[rs]);} int len; void modify(int u,int x,int y,int op=1,int l=0,int r=len){ if(l==r){ if(op==1)S[u].insert(y); else S[u].erase(y); if(S[u].size()==0)s[u]=0; else s[u]=*(--S[u].end()); return; } int mid=l+r>>1; if(x<=mid)modify(ls,x,y,op,l,mid); else modify(rs,x,y,op,mid+1,r); pushup(u); } auto p=make_pair(-1,-1); PII q(int u,int x,int y,int l=0,int r=len){ if(r<x)return p; if(s[u]<y)return p; if(l==r)return make_pair(l,*S[u].lower_bound(y)); int mid=l+r>>1; auto L=q(ls,x,y,l,mid); if(L==p)return q(rs,x,y,mid+1,r); else return L; } int mp[N]; signed main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>T; for(int i=1;i<=T;i++){ cin>>op>>x>>y; Q[i]={op,x,y}; a[cnt++]=x,a[cnt++]=y; } sort(a,a+cnt); len=unique(a,a+cnt)-a; for(int i=1;i<=T;i++){ op=Q[i].op,x=Q[i].x,y=Q[i].y; int k=1; if(op=="remove")k=-1; if(op=="find"){ x=lower_bound(a,a+len,x+1)-a; y=lower_bound(a,a+len,y+1)-a; auto t=q(1,x,y); if(t==p)cout<<-1<<'\n'; else cout<<a[t.first]<<" "<<a[t.second]<<'\n'; } else{ x=lower_bound(a,a+len,x)-a; y=lower_bound(a,a+len,y)-a; modify(1,x,y,k); } } }
|