树状数组训练题2:SuperBrother打鼹鼠(vijos1512)
2017-11-02 11:05
141 查看
先给题目链接:打鼹鼠
这道题怎么写?
很明显是树状数组。
而且,很明显是二维树状数组。
如果你没学过二维的树状数组,那么戳开这里:二维树状数组
看完以后,你就会知道怎么做了。
没有什么好解释的,几乎就是二维树状数组的板子。
给代码:
这道题怎么写?
很明显是树状数组。
而且,很明显是二维树状数组。
如果你没学过二维的树状数组,那么戳开这里:二维树状数组
看完以后,你就会知道怎么做了。
没有什么好解释的,几乎就是二维树状数组的板子。
给代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n; long long C[1027][1027]; int lowbit(int x){ return x&(-x); } void add(int x,int y,long long p){ while(x<=n){ for(int i=y;i<=n;i+=lowbit(i)){ C[x][i]+=p; } x+=lowbit(x); } } long long sum(int x,int y){ long long result = 0; while(x>0){ for(int i=y;i>0;i-=lowbit(i)){ result+=C[x][i]; } x-=lowbit(x); } return result; } long long ask(int x1,int y1,int x2,int y2){ return sum(x2,y2)+sum(x1-1,y1-1)-sum(x2,y1-1)-sum(x1-1,y2); } int main(){ scanf("%d",&n); memset(C,0,sizeof(C)); while(1){ int op; scanf("%d",&op); if(op==3){ break; }else if(op==2){ int xx1,yy1,xx2,yy2; scanf("%d%d%d%d",&xx1,&yy1,&xx2,&yy2); printf("%lld\n",ask(xx1+1,yy1+1,xx2+1,yy2+1)); }else if(op==1){ int x,y; long long k; scanf("%d%d%lld",&x,&y,&k); add(x+1,y+1,k); } } return 0; }
相关文章推荐
- vijos-1512 SuperBrother打鼹鼠(二维树状数组)
- [Vijos1512] SuperBrother打鼹鼠 (二维树状数组)
- [Vijos 1512] SuperBrother打鼹鼠
- 树状数组训练题1:弱弱的战壕(vijos1066)
- Vijos 1512 SuperBrother打鼹鼠
- 二维树状数组——SuperBrother打鼹鼠(Vijos1512)
- VIJOS 1512SuperBrother打鼹鼠(二维BIT)
- f697 树状数组-vijos1512SuperBrother打鼹鼠
- VIJOS-P1512 SuperBrother打鼹鼠
- [Vijos] SuperBrother打鼹鼠
- vijos 1066 树状数组
- [vijos 1663][vijos 1664]资源勘探(动态统计+树状数组)
- vijos 1448 校园外的数 树状数组 括号序列
- [线段树] [树状数组] [Vijos P1512] SuperBrother打鼹鼠 (mole)
- vijos 1448 校门外的树 - 树状数组
- 【VIJOS】P1512 SuperBrother打鼹鼠
- |Vijos|树状数组|P1512 SuperBrother打鼹鼠
- 重庆一中Vijos 【训练题】花店橱窗布置 P1426
- vijos P1810导弹拦截 (排序+树状数组)
- vijos 1512