标签:lld 操作 div 正整数 pen 模板 data- bsp size
这是一道模板题。
给出一个 n×mn×m 的零矩阵 AA,你需要完成如下操作:
1 x y k1 x y k:表示元素 Ax,yAx,y自增 kk;
2 a b c d2 a b c d:表示询问左上角为 (a,ba,b),右下角为 (c,dc,d) 的子矩阵内所有数的和。
输入的第一行有两个正整数 n,mn,m;
接下来若干行,每行一个操作,直到文件结束。
对于每个 22 操作,输出一个整数,表示对于这个操作的回答。
2 2 1 1 1 3 1 2 2 4 2 1 1 2 2
7
数据范围与提示:
对于 10% 的数据,n=1n=1;
对于另 10% 的数据,m=1m=1;
对于全部数据,1≤n,m≤212,1≤x,a,c≤n,1≤y,b,d≤m,∣k∣≤1051≤n,m≤212,1≤x,a,c≤n,1≤y,b,d≤m,∣k∣≤105 ,保证操作数目不超过 3×1053×105 ,且询问的子矩阵存在。
#include<bits/stdc++.h> using namespace std; long long a[4097][4097]; int n,m; void Add(int x,int y,int p){ for(int i=x;i<=n;i+=i&(-i))for(int j=y;j<=m;j+=j&(-j))a[i][j]+=p; } long long Que(int x,int y){ long long res=0; for(int i=x;i;i-=i&(-i))for(int j=y;j;j-=j&(-j))res+=a[i][j]; return res; } int main(){ //freopen("test.in","r",stdin); scanf("%d%d",&n,&m);int op; while(scanf("%d",&op)!=EOF){ if(op-1){ int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); printf("%lld\n",Que(c,d)-Que(c,b-1)-Que(a-1,d)+Que(a-1,b-1)); } else{ int x,y,k; scanf("%d%d%d",&x,&y,&k); Add(x,y,k); } } return 0; }
标签:lld 操作 div 正整数 pen 模板 data- bsp size
原文地址:https://www.cnblogs.com/fdezlsq/p/11432306.html