Vijos1512 SuperBrother打鼹鼠

Posted 江屿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vijos1512 SuperBrother打鼹鼠相关的知识,希望对你有一定的参考价值。

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打鼹鼠的主要内容,如果未能解决你的问题,请参考以下文章

vijos p1512——SuperBrother打鼹鼠(树状数组)(复习)

[Vijos1512] SuperBrother打鼹鼠 (二维树状数组)

Vijos 1512 --打鼹鼠

二维树状数组复习—— SuperBrother打鼹鼠

打鼹鼠

Tyvj1474 打鼹鼠