1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <algorithm>
 5 #include <cstring>
 6 #define maxn 500005
 7 #define maxm 800005 
 8 using namespace std;
 9 
10 int n,m,cnt,sum[maxn],pos[maxm],ans[maxm];
11 struct date{
12     int op,x,y,v,id;
13 }qs[maxm];
14 
15 bool comp(date x,date y){
16     return x.x<y.x;
17 }
18 
19 int lowbit(int x){
20     return x&(-x);
21 }
22 
23 void add(int x,int y){
24     for (int i=x;i<=n;i+=lowbit(i)){
25         sum[i]+=y;
26     }
27 }
28 
29 int  query(int x){
30     int temp=0;
31     for (int i=x;i>0;i-=lowbit(i)){
32         temp+=sum[i];
33     }
34     return temp;
35 }
36 
37 void cdq_solve(int l,int r){
38     if (l==r) return;
39     int mid=(l+r)/2,temp=0;
40     cdq_solve(l,mid),cdq_solve(mid+1,r);
41     sort(qs+l,qs+mid+1,comp),sort(qs+mid+1,qs+r+1,comp);
42     int i=l,j=mid+1;
43     while (j<=r){
44         while (qs[i].op==2&&i<=mid) i++;
45         while (qs[j].op==1&&j<=r) j++;
46         if (i<=mid&&qs[i].x<=qs[j].x) add(qs[i].y,qs[i].v),i++,temp=i-1;
47         else if (j<=r) ans[qs[j].id]+=query(qs[j].y),j++;
48     }
49     for (int t=l;t<=temp;t++) if (qs[t].op==1) add(qs[t].y,-qs[t].v); 
50 }
51 
52 int main(){
53     memset(ans,0,sizeof(ans));
54     memset(sum,0,sizeof(sum));
55     int op,x1,x2,y1,y2;
56     scanf("%d",&n),m=cnt=0;
57     for (;;){
58         scanf("%d",&op);
59         if (op==1){
60             qs[++m].op=op,qs[m].id=m;
61             scanf("%d%d%d",&qs[m].x,&qs[m].y,&qs[m].v);
62         }else{
63             if (op==2){
64                 scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
65                 pos[++cnt]=m;
66                 qs[++m].op=op,qs[m].x=x1-1,qs[m].y=y1-1,qs[m].id=m;
67                 qs[++m].op=op,qs[m].x=x2,qs[m].y=y2,qs[m].id=m;        
68                 qs[++m].op=op,qs[m].x=x1-1,qs[m].y=y2,qs[m].id=m;
69                 qs[++m].op=op,qs[m].x=x2,qs[m].y=y1-1,qs[m].id=m;
70             }else break;
71         }
72     }
73     cdq_solve(1,m);
74     for (int i=1;i<=cnt;i++) printf("%d\n",ans[pos[i]+1]+ans[pos[i]+2]-ans[pos[i]+3]-ans[pos[i]+4]);
75 }
View Code

相关文章:

  • 2022-12-23
  • 2022-01-03
  • 2021-09-02
  • 2022-12-23
  • 2022-12-23
  • 2021-09-19
  • 2021-10-23
  • 2022-01-01
猜你喜欢
  • 2021-09-23
  • 2021-08-08
  • 2022-12-23
  • 2021-11-06
  • 2021-09-04
  • 2021-09-28
  • 2021-10-23
相关资源
相似解决方案