1. 程式人生 > >Vijos1512 SuperBrother打鼴鼠

Vijos1512 SuperBrother打鼴鼠

cat ble 表示 get while 描述 targe ati div

SuperBrother打鼴鼠

Vijos鏈接

題目描述:

在一個矩陣中,有三種操作:

1.後面跟著3個數x,y,k,表示在點(x,y)處新出現了k只鼴鼠。

2.後面跟著4個數x1,y1,x2,y2,表示詢問矩形(x1,y1)-(x2,y2)內的鼴鼠數量。

3.表示結束。

思路:

一個樹狀數組就可以搞定了,不過需要二維的樹狀數組,才能實現二維的區間查詢。

代碼:

技術分享
 1 #include<cstdio>
 2 long long n,m,dis[10010][10010],tot,a,b,c,d;
 3 using namespace std;
 4 void add(long long
x,long long y,long long z){ 5 for(long long i=x;i<=n;i+=i&(-i)) 6 for(long long j=y;j<=n;j+=j&(-j)) 7 dis[i][j]+=z; 8 } 9 long long q(long long x,long long y){ 10 tot=0; 11 for(long long i=x;i;i-=i&(-i)) 12 for(long long j=y;j;j-=j&(-j))
13 tot+=dis[i][j]; 14 return tot; 15 } 16 int main(){ 17 scanf("%lld",&n); 18 while(1){ 19 scanf("%lld",&m); 20 if(m==1){ 21 scanf("%lld%lld%lld",&a,&b,&c); 22 a++;b++; 23 add(a,b,c); 24 } 25 else
26 if(m==2){ 27 scanf("%lld%lld%lld%lld",&a,&b,&c,&d); 28 a++;b++;c++;d++; 29 printf("%lld\n",q(c,d)-q(a-1,d)-q(c,b-1)+q(a-1,b-1)); 30 } 31 else 32 break; 33 } 34 return 0; 35 }
View Code

Vijos1512 SuperBrother打鼴鼠