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 }

时间: 2024-10-05 11:33:56

Vijos1512 SuperBrother打鼹鼠的相关文章

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

传送门 直接搞就行. 注意下表re从零开始,而树状数组搞不了0,所以统一增加一个偏移量1. (话说数据随机是什么鬼?) 1 # include <iostream> 2 # include <cstdio> 3 # include <cstring> 4 # include <string> 5 # include <cmath> 6 # include <vector> 7 # include <map> 8 # inc

vijos 1512 SuperBrother打鼹鼠

SuperBrother打鼹鼠 背景 SuperBrother在机房里闲着没事干(再对比一下他的NOIP,真是讽刺啊......),于是便无聊地开始玩“打鼹鼠”...... 描述 在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……).洞口都在一个大小为n(n<=1024)的正方形中.这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1).洞口所在的位置都是整点,就是横纵坐标都为整数的点.而SuperBrother也不时地会想知道某一

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

树状数组(BIT)是一个查询和修改复杂度都为log(n)的数据结构,主要用于查询任意两位之间的所有元素之和,其编程简单,很容易被实现.而且可以很容易地扩展到二维.让我们来看一道很裸的二维树状数组题: 在一个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……).洞口都在一个大小为n(n<=1024)的正方形中.这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1).洞口所在的位置都是整点,就是横纵坐标都为整数的点.而SuperBrother

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

在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……).洞口都在一个大小为n(n< =1024)的正方形中.这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1).洞口所在的位置都是整点,就是横纵坐标都为整数的点.而SuperBrother也不时地会想知道某一个范围的鼹鼠总数.这就是你的任务. 输入 每个输入文件有多行. 第一行,一个数n,表示鼹鼠的范围. 以后每一行开头都有一个数m,表示不同的操作: m=1,那么后面跟着3个数x,y

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

背景 SuperBrother在机房里闲着没事干(再对比一下他的NOIP,真是讽刺啊......),于是便无聊地开始玩“打鼹鼠”...... 描述 在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……).洞口都在一个大小为n(n<=1024)的正方形中.这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1).洞口所在的位置都是整点,就是横纵坐标都为整数的点.而SuperBrother也不时地会想知道某一个范围的鼹鼠总数.这就是你的任务

【Aguin】第五周 6.14-6.20

6.14-6.15 什么都没干. 6.16 好久没码题了.快结课了会空很多.但在时间上有些难以抉择. 最主要的是后面还有一系列问题要困扰我.放假家里还有事情. 烦阿烦阿 该何去何从. 校门外的树 因为是段增的.一开始想到了挖掘机那种方法. 但是段问的时候就挂了. 学了两颗树处理段增段问的方法.  Aguin 6.17 SuperBrother打鼹鼠 二维树状数组  Aguin 6.18 P1512 SuperBrother打鼹鼠 依旧此题.昨晚就在写.刷牙的时候感觉不对.今天推了重写. 还是去v

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

Vijos 1512 --打鼹鼠

背景 SuperBrother在机房里闲着没事干(再对比一下他的NOIP,真是讽刺啊......),于是便无聊地开始玩“打鼹鼠”...... 描述 在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……).洞口都在一个大小为n(n<=1024)的正方形中.这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1).洞口所在的位置都是整点,就是横纵坐标都为整数的点.而SuperBrother也不时地会想知道某一个范围的鼹鼠总数.这就是你的任务

VIJOS 1512SuperBrother打鼹鼠(二维BIT)

呵呵.. 二维树状数组,第二维和第一维基本一样. -------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<cstring> #include<algorithm> #define rep(i, n) for(int i = 0; i < n; ++i) #def