T7
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 using namespace std; 6 int s,n; 7 int op; 8 const int maxn=2e6+10; 9 int c[maxn]; 10 struct SS 11 { 12 int lowbit(int x) 13 { 14 return x&(-x); 15 } 16 void add(int x,int w) 17 { 18 for(;x<=n;x+=lowbit(x)) 19 { 20 c[x]+=w; 21 } 22 } 23 int sum(int x) 24 { 25 int res=0; 26 for(;x;x-=lowbit(x)) 27 { 28 res+=c[x]; 29 } 30 return res; 31 } 32 }XX; 33 int ans[maxn]; 34 35 struct node 36 { 37 int id; 38 int op; 39 int x1,x2,y1,y2; 40 bool operator <(const node &x)const 41 { 42 if(x1==x.x1) 43 { 44 return op<x.op; 45 } 46 return x1<x.x1; 47 } 48 }way[maxn],a[maxn]; 49 void cdq(int l,int r) 50 { 51 if(l==r) 52 { 53 return ; 54 } 55 int mid=(l+r)>>1; 56 cdq(l,mid); 57 cdq(mid+1,r); 58 int cnt=0; 59 for(int i=l;i<=mid;i++) 60 { 61 if(way[i].op==1) 62 { 63 a[cnt++]=way[i]; 64 } 65 } 66 for(int i=mid+1;i<=r;i++) 67 { 68 if(way[i].op==2) 69 { 70 a[cnt++]=way[i]; 71 a[cnt-1].op=0; 72 a[cnt++]=way[i]; 73 a[cnt-1].op=2; 74 a[cnt-1].x1=way[i].x2; 75 } 76 } 77 sort(a,a+cnt); 78 for(int i=0;i<cnt;i++) 79 { 80 if(a[i].op==0) 81 { 82 ans[a[i].id]-=(XX.sum(a[i].y2)-XX.sum(a[i].y1-1)); 83 } 84 else 85 if(a[i].op==1) 86 { 87 XX.add(a[i].y1,a[i].x2); 88 } 89 else 90 { 91 ans[a[i].id]+=(XX.sum(a[i].y2)-XX.sum(a[i].y1-1)); 92 } 93 } 94 } 95 inline int read() 96 { 97 int x=0,f=1; 98 char ch=getchar(); 99 while(isdigit(ch)==0 && ch!='-')ch=getchar(); 100 if(ch=='-')f=-1,ch=getchar(); 101 while(isdigit(ch))x=x*10+ch-'0',ch=getchar(); 102 return x*f; 103 } 104 int main() 105 { 106 memset(c,0,sizeof(c)); 107 memset(ans,0,sizeof(ans)); 108 s=read(); 109 n=read(); 110 int cnt=0; 111 int tot=0; 112 while(scanf("%d",&op)&&op!=3) 113 { 114 if(op==1) 115 { 116 int x,y,z; 117 x=read(); 118 y=read(); 119 z=read(); 120 way[++cnt].op=op; 121 way[cnt].id=-1; 122 way[cnt].x1=x; 123 way[cnt].y1=y; 124 way[cnt].x2=z; 125 way[cnt].y2=0; 126 127 } 128 if(op==2) 129 { 130 int x1,x2,y1,y2; 131 x1=read(); 132 y1=read(); 133 x2=read(); 134 y2=read(); 135 way[++cnt].op=op; 136 way[cnt].id=++tot; 137 way[cnt].x1=x1; 138 way[cnt].x2=x2; 139 way[cnt].y1=y1; 140 way[cnt].y2=y2; 141 } 142 } 143 cdq(1,cnt); 144 for(int i=1;i<=tot;i++) 145 { 146 printf("%d\n",ans[i]); 147 //cout<<ans[i]<<endl; 148 } 149 return 0; 150 }