博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2642 Stars 树状数组
阅读量:5172 次
发布时间:2019-06-13

本文共 1883 字,大约阅读时间需要 6 分钟。

1 /* 2 写于13年3月21日 3 单点更新,区间求和,二维树状数组 4 输入x1,x2,y1,y2时,输成了x1,y1,x2,y2。调试了两个小时,汗! 5  6 注意:i=0||j=0时,lowbit()返回0 ,add()函数会进入死循环 7 所以数据输入后进行自加操作 8 */ 9 #include 
10 #include
11 #include
12 using namespace std;13 const int maxn=1010;14 int tree[maxn][maxn];15 int marked[maxn][maxn];16 int lowbit(int i)17 {18 return i&(-i);19 }20 void add(int x,int y,int num)21 {22 //i=0||j=0时,lowbit()返回0 ,死循环23 for(int i=x;i<=maxn;i+=lowbit(i))24 {25 for(int j=y;j<=maxn;j+=lowbit(j))26 {27 28 tree[i][j]+=num;29 }30 31 }32 }33 int sum(int x,int y)34 {35 int ans=0;36 for(int i=x;i>0;i-=lowbit(i))37 {38 for(int j=y;j>0;j-=lowbit(j))39 {40 ans+=tree[i][j];41 }42 }43 44 return ans;45 }46 int main()47 {48 int n;49 char c;50 int x1,y1,x2,y2;51 sum(0,0);52 while(cin>>n)53 {54 memset(marked,0,sizeof(marked));//标记该点的亮灭,决定是否更新55 while(n--)56 {57 //还有就是C中的输入字符操作真心不好操控啊!58 cin>>c;59 if(c=='B')60 {61 cin>>x1>>y1;62 x1++,y1++;63 if(!marked[x1][y1])64 {65 marked[x1][y1]=1;66 add(x1,y1,1);67 }68 }69 else if(c=='D')70 {71 cin>>x1>>y1;72 x1++,y1++;73 if(marked[x1][y1])74 {75 marked[x1][y1]=0;76 add(x1,y1,-1);77 }78 }79 else if(c=='Q')80 {81 cin>>x1>>x2>>y1>>y2;82 x1++,y1++;83 x2++,y2++;84 if(x1

 

转载于:https://www.cnblogs.com/caoyuanlang/archive/2013/03/21/2972687.html

你可能感兴趣的文章
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>
11.28.cookie
查看>>
BeanShell简介
查看>>
python字符串操作
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
ES5_03_Object扩展
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>
创建数据库,表
查看>>
工厂模式
查看>>
计算机网络基础知识
查看>>
C#里如何遍历枚举所有的项
查看>>
如何在键盘出现时滚动表格,以适应输入框的显示
查看>>