一、前置知识-树状数组

树状数组(binary indexed tree)是一种简洁的代码量很小的数据结构,能够高效的处理前缀区间上的问题。在很多情况下能写树状数组解决的就不用码半天线段树了。

树状数组支持两种操作:

a)单点更新: 例如更改序列中的某一个元素的值,复杂度O(logn)

b)前缀查询: 查询序列中的前缀信息,例如,区间[1,n]中的最大值或者区间和,复杂度O(logn)

同时由于求和操作的“可减性”,可以通过查询两次前缀和实现求解序列的区间和

二、HDU1166 树状数组求解区间和

题意:单点修改元素,查询区间和,树状数组求区间和实现。

代码:

 # include <iostream>
# include <cstdio>
# include <cstring>
using namespace std;
const int maxn = 5e4+;
int N,A[maxn],C[maxn];
inline int lowbit(int x)
{
return x&(-x);
}
void Update(int index,int val)
{
while(index<=N)
{
C[index] += val;
index += lowbit(index);
}
}
int Query_Sum(int index)
{
int res = ;
while(index)
{
res += C[index];
index -= lowbit(index);
}
return res;
}
void Init()
{
scanf("%d",&N);
memset(C,,sizeof(C));
memset(A,,sizeof(A));
for(int i=;i<=N;i++)
{
scanf("%d",&A[i]);
Update(i,A[i]);
}
}
void Solve(int t)
{
printf("Case %d:\n",t);
int a,b;
char ins[];
while(scanf("%s",ins)!=EOF)
{
if(ins[]=='E')
break;
scanf("%d%d",&a,&b);
if(ins[]=='Q')
printf("%d\n",Query_Sum(b)-Query_Sum(a-));
if(ins[]=='A')
Update(a,b);
if(ins[]=='S')
Update(a,-b);
}
}
int main()
{
int T;
scanf("%d",&T);
for(int t=;t<=T;t++)
{
Init();
Solve(t);
}
return ;
}

三、BZOJ1012 树状数组求解前缀最大值

题意:在空队列里不断向队尾插入元素,过程中查询倒数第K大的元素,树状数组求最值实现。

代码:

 # include <iostream>
# include <cstdio>
# include <cstring>
using namespace std;
const int maxn = 2e5+;
int M,cnt;
long long D,val,ans,A[maxn],C[maxn];
char S[];
inline long long lowbit(long long x) {return x&(-x);}
void update(int index,long long value)
{
while(index)
{
C[index] = max(C[index],value);
index -= lowbit(index);
}
}
long long query(int index)
{
long long res = ;
while(index<=M)
{
res = max(res,C[index]);
index += lowbit(index);
}
return res;
}
void Init()
{
cnt = ;
ans = ;
memset(C,,sizeof(C));
}
void Solve()
{
for(int i=;i<M;i++)
{
scanf("%s%lld",S,&val);
if(S[]=='A')
{
cnt++;
update(cnt,(val+ans)%D);
}
else
{
ans = query(cnt-val+);
printf("%lld\n",ans);
}
}
}
int main()
{
while(scanf("%d%lld",&M,&D)!=EOF)
{
Init();
Solve();
}
return ;
}

HDU1166 敌兵布阵 BZOJ1012 最大数[树状数组]的更多相关文章

  1. HDU1166敌兵布阵(线段树,树状数组)

    题面 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况 ...

  2. kuangbin专题七 HDU1166 敌兵布阵 (线段树或树状数组)

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  3. HDU1166 敌兵布阵_线段树

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. HDU1166敌兵布阵(线段树单点更新)

    线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点.       对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b ...

  5. hdu1166敌兵布阵_线段树单点更新

    Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任 ...

  6. hdu1166 敌兵布阵【线段树】

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  7. hdu1166 敌兵布阵 (线段树单点更新)

    Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营 地,Derek和Tidy的任务就是要监视这 ...

  8. HDU 1611 敌兵布阵 / HRBUST 1794 敌兵布阵(线段树)

    HDU 1611 敌兵布阵 / HRBUST 1794 敌兵布阵(线段树) Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A ...

  9. HDU1166 敌兵布阵(树状数组实现

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

随机推荐

  1. MUI - 实现关闭除指定页面外的其他所有页面的功能

    实现关闭除指定页面外的其他所有页面的功能 比如在实现注销登录功能时,要保证旧有的webweiw或缓存不影响新用户的操作,就需要在跳转到登陆页面前关闭其他页面. http://www.cnblogs.c ...

  2. 在沙箱中IE不能上网的解决方法

    近期在解决一个问题,在我们的沙箱中IE不能上网 现象:     IE不能上网.输入www.baidu.com 提示:不能查找到DNS.也不能ping 通     其它浏览器上网没有问题(SG浏览器,C ...

  3. 应用内购(In-App Purchase)常见问题解答

    http://www.cocoachina.com/ios/20150612/12110.html 本文档为您解答应用内购相关的常见问题. 配置(Configuration) 1.我必须上传一个二进制 ...

  4. @atcoder - CODE FESTIVAL 2017 Final - J@ Tree MST

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 N 个点,第 i 点有一个点权 Xi,再给定一棵边带权的树 ...

  5. @NOIP2018 - D2T1@ 旅行

    目录 @题目描述@ @题解@ @代码@ @题目描述@ 小 Y 是一个爱好旅行的 OIer.她来到 X 国,打算将各个城市都玩一遍. 小Y了解到, X国的 n 个城市之间有 m 条双向道路.每条双向道路 ...

  6. 15-2 mysql的数据类型

    一.整数类型 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT 作用:存储年龄,等级,id,各种号码等 ============================== ...

  7. TensorFlow的 卷积层

    用 TensorFlow 做卷积 让我们用所学知识在 TensorFlow 里构建真的 CNNs.在下面的练习中,你需要设定卷积核滤波器(filters)的维度,weight,bias.这在很大程度上 ...

  8. HZOJ 通讯

    B. 通讯 题目描述 “这一切都是命运石之门的选择.” 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短 信,并由此得知了伦太郎制作出了电话微波炉(仮). 为了掌握时间机器的技术, ...

  9. Linux 运算符

    布尔运算符 下表列出了常用的布尔运算符,假定变量a为10 变量b为20: 运算符  说明 举例 ! 非运算 , 表达式为true 则返回false 否则返回true  [!false] 返回true. ...

  10. 不插字段,直接利用OracleSpatial计算

    select to_char(regexp_replace(sdo_util.to_gmlgeometry(sdo_geom.sdo_difference( SDO_GEOMETRY ( 2003, ...