题意很好理解,不解释了!
需要更新某一点的值,及查询某矩形区域内数量,二维线段树貌似不好写……
所以就出来了第一道树状数组,胡喷纪念下至今没怎么理解只会照着模板打的树状数组。。。。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1030
//int map[N][N];
int c[N][N];
int n;
int lowbit(int x)
{
return x&(x^(x-1));
}
void Init()
{
scanf("%d",&n);
// memset(map,0,sizeof(map));
memset(c,0,sizeof(c));
}
void updata(int x,int y,int a){
int mj=y;
while(x<=n){
for(y=mj;y<=n;y+=lowbit(y)){
c[x][y] +=a;
}
x+=lowbit(x);
}
}
int search(int i,int j )
{
int ans=0,mj=j;
while(i>0){
for(j=mj;j>0;j-=lowbit(j)){
ans += c[i][j];
}
i -= lowbit(i);
}
return ans;
}
int main()
{
int T,x,y,a,l,b,r,t,ans;
while(~scanf("%d",&T),T!=3){
if(T == 0)Init();
else if(T == 1){
scanf("%d%d%d",&x,&y,&a);
// map[x][y] += a;
updata(x+1,y+1,a);
}
else {
scanf("%d%d%d%d",&l,&b,&r,&t);
ans = search(r+1,t+1)-search(r+1,b)-search(l,t+1)+search(l,b);
printf("%d\n",ans);
}
}
return 0;
}