Vijos1512 SuperBrother打鼴鼠
阿新 • • 發佈:2017-05-17
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 longView Codex,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 else26 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 }
Vijos1512 SuperBrother打鼴鼠