博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1166 敌兵布阵 树状数组
阅读量:5060 次
发布时间:2019-06-12

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

 

View Code
1 /* 2 树状数组(二叉索引树,Binary Indexed Tree,BIT) 3  4          5 */ 6  7 #include 
8 #include
9 using namespace std;10 11 const int maxn = 50010;12 int sum[maxn];13 int a[maxn];14 int n ;15 16 int lowbit (int x) //取x的最低位1,比如4,则返回4,如5,则返回117 {18 return x & (-x) ;19 }20 21 void add(int i,int value) //将第i个元素增加value22 {23 //i的祖先都要增加val24 while(i<=n)25 {26 sum[i] += value ;27 i += lowbit(i) ; //将i的最低位1补1,得到其祖先28 29 }30 }31 int Sum(int i) //求前i项和32 {33 int count = 0;34 //将前i项分段35 while(i>0)36 {37 count += sum[i] ;38 i -= lowbit(i) ; //去掉i的最低位139 }40 return count ;41 }42 43 void main()44 {45 int t ;46 cin>>t ;47 for(int cnt = 1;cnt<=t;cnt++)48 {49 memset(sum,0,sizeof(sum));50 cout<<"Case "<
<<":"<
>n ;52 for(int i=1;i<=n;i++) //注意数组从1开始的53 {54 scanf("%d",&a[i]);55 add(i,a[i]) ;56 }57 string s;58 while(cin>>s , s !="End")59 {60 int i,j;61 scanf("%d%d",&i,&j);62 if(s=="Query")63 {64 printf("%d\n",Sum(j)-Sum(i-1));65 }66 if(s=="Add")67 {68 add(i,j) ;69 }70 if(s=="Sub")71 {72 add(i,-j);73 }74 }75 }76 }

 

转载于:https://www.cnblogs.com/pcpcpc/archive/2012/11/10/2763868.html

你可能感兴趣的文章
IO—》Properties类&序列化流与反序列化流
查看>>
【蓝桥杯】PREV-21 回文数字
查看>>
html 简介
查看>>
python使用上下文对代码片段进行计时,非装饰器
查看>>
js中比较实用的函数用法
查看>>
安装预览版镜像后无法检测到预览版更新的解决方案
查看>>
【bzoj5099】[POI2018]Pionek 双指针法
查看>>
别让安全问题拖慢了 DevOps!
查看>>
JAR打包和运行
查看>>
session如何保存在专门的StateServer服务器中
查看>>
react展示数据
查看>>
测试计划
查看>>
idea设置自定义图片
查看>>
[高级]Android多线程任务优化1:探讨AsyncTask的缺陷
查看>>
选择器
查看>>
rownum 的使用
查看>>
Mysql与Oracle 的对比
查看>>
MVC系列博客之排球计分(三)模型类的实现
查看>>
npm安装
查看>>
阅读笔记02
查看>>