HDU 2642 Stars 简单二维树状数组应用
2010-09-23 23:01
656 查看
这道题同HDU 1892 有很大的相同点,但是更加简单!所以没有什么太大的难度!
只要小心状态更新时就是当该点的星星为亮是则不再设为亮,为暗是不再设为暗就可以了!就是这个状态的区别!小心就可以ac!
话不多说看代码:
继续加油吧!ac快乐!
只要小心状态更新时就是当该点的星星为亮是则不再设为亮,为暗是不再设为暗就可以了!就是这个状态的区别!小心就可以ac!
话不多说看代码:
#include<iostream> using namespace std; int tree[1010][1010]; int state[1010][1010];//另开一个数组来存储该点的星星的状态 int maxn=1009; void update(int x,int y,int val) { int temp=y; while(x<=maxn) { y=temp; while(y<=maxn) { tree[x][y]+=val; y+=y&-y; } x+=x&-x; } } int read(int x,int y) { int sum=0,temp=y; while(x>0) { y=temp; while(y>0) { sum+=tree[x][y]; y-=y&-y; } x-=x&-x; } return sum; } int main() { int M,x1,y1,x2,y2,xmax,ymax,xmin,ymin; string op; scanf("%d",&M); memset(tree,0,sizeof(tree)); memset(state,0,sizeof(state)); while(M--) { cin>>op; if(op=="B") { scanf("%d%d",&x1,&y1); x1++; y1++; if(state[x1][y1]!=1) { update(x1,y1,1); state[x1][y1]=1; } } else if(op=="D") { scanf("%d%d",&x1,&y1); x1++; y1++; if(state[x1][y1]!=0) { update(x1,y1,-1); state[x1][y1]=0; } } else { scanf("%d%d%d%d",&x1,&x2,&y1,&y2); x1++; y1++; x2++; y2++; xmax=max(x1,x2); ymax=max(y1,y2); xmin=min(x1,x2); ymin=min(y1,y2); printf("%d/n",read(xmax,ymax)-read(xmax,ymin-1)-read(xmin-1,ymax)+read(xmin-1,ymin-1)); } } return 0; }
继续加油吧!ac快乐!
相关文章推荐
- hdu 2642 Stars--二维树状数组的应用
- HDU 2642 Stars [二维树状数组]【数据结构】
- HDU 2642 Stars(二维树状数组 模板题)
- HDU 2642 stars 二维树状数组
- hdu 2642 Stars 二维树状数组水题
- HDU-2642-Stars(二维树状数组应用)
- hdu 2642 二维树状数组 单点更新区间查询 模板水题
- HDU 2642(树状数组模板二维)
- HDU_2642_二维树状数组
- HDU 2642 二维树状数组问题
- hdu——1166(数据结构之树状数组的简单应用)
- hdu 2642 二维树状数组 单点更新区间查询 模板水题
- HDU 1541 Stars(树状数组入门应用)
- HDU 2642 Stars 二维树状数组应用
- HDU 1556 Color the ball (树状数组简单应用)
- HDU 2642 二维树状数组(单点更新,区间求和)
- HDU 2642 二维树状数组
- hdu 二维树状数组 简单题目 靠。。。。。扯蛋的悲哀,如果上天给我一种干掉你的愿望,我宁愿放弃——努力的结晶
- hdu 2642 二维树状数组
- POJ 1656 二维树状数组简单应用