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
|
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #define rep(i,x,y) for(register int i=x;i<=y;++i) #define repd(i,x,y) for(register int i=x;i>=y;--i) #define ll long long using namespace std; const int N=1e6+7; const int inf=0x3f3f3f3f; int rt[55],lson[N],rson[N],v[N],cnt,op,res,X; void (int &o,int l,int r,int x,int y){ if(!o)v[o=++cnt]=x; v[o]=min(v[o],x); if(l==r)return ; int mid=l+r>>1; if(y<=mid)update(lson[o],l,mid,x,y); else update(rson[o],mid+1,r,x,y); } void query(int o,int l,int r,int a,int b){ if(!o||res)return ; if(a<=l&&b>=r){res=(v[o]<=X);return ;} int mid=l+r>>1; if(a<=mid)query(lson[o],l,mid,a,b); if(b>mid)query(rson[o],mid+1,r,a,b); } int main(){ while(~scanf("%d",&op)&&op!=3){ if(op==0){ cnt=0; memset(rt,0,sizeof rt); memset(lson,0,sizeof lson); memset(rson,0,sizeof rson); memset(v,0x3f,sizeof v); } else if(op==1){ int x,y,c; scanf("%d%d%d",&x,&y,&c); update(rt[c],1,N-3,x,y); } else { int ans=0,y1,y2; scanf("%d%d%d",&X,&y1,&y2); rep(i,0,50){ res=0; query(rt[i],1,N-3,y1,y2); if(res)ans++; } printf("%dn",ans); } } return 0; }
|
近期评论