【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵
https://vjudge.net/contest/66989#problem/A
单点修改,区间查询
方法一:线段树
http://www.cnblogs.com/kuangbin/archive/2011/08/15/2139834.html
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib> using namespace std;
const int maxn=5e4+;
const int inf=0x3f3f3f3f;
int num[maxn];
int n;
struct Node
{
int l;
int r;
int nSum;
}segTree[maxn<<]; void Build(int i,int l,int r)
{
segTree[i].l=l;
segTree[i].r=r;
if(l==r)
{
segTree[i].nSum=num[l];
return;
}
int mid=(l+r)>>;
Build(i<<,l,mid);
Build((i<<)|,mid+,r);
segTree[i].nSum=segTree[i<<].nSum+segTree[(i<<)|].nSum;
} void Add(int i,int t,int b)
{
segTree[i].nSum+=b;
if(segTree[i].l==segTree[i].r)
{
return;
}
int mid=(segTree[i].l+segTree[i].r)>>;
if(t<=mid)
{
Add(i<<,t,b);
}
else
{
Add((i<<)|,t,b);
}
} int Query(int i,int l,int r)
{
if(segTree[i].l==l&&segTree[i].r==r)
{
return segTree[i].nSum;
}
int mid=(segTree[i].l+segTree[i].r)>>;
if(r<=mid)
{
return Query(i<<,l,r);
}
else if(l>mid)
{
return Query((i<<)|,l,r);
}
else
{
return Query(i<<,l,mid)+Query((i<<)|,mid+,r);
}
}
int main()
{
int T;
scanf("%d",&T);
int kas=;
while(T--)
{
printf("Case %d:\n",kas++);
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&num[i]);
}
Build(,,n);
char ch[];
int a,b;
while(scanf("%s",ch)==&&ch[]!='E')
{
scanf("%d%d",&a,&b);
if(ch[]=='Q')
{
int ans=Query(,a,b);
printf("%d\n",ans);
}
else if(ch[]=='A')
{
Add(,a,b);
}
else
{
Add(,a,-b);
}
}
}
return ;
}
方法二:树状数组
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib> using namespace std;
const int maxn=5e4+;
const int inf=0x3f3f3f3f;
int tree[maxn];
int n;
void Init()
{
memset(tree,,sizeof(tree));
}
int lowbit(int x)
{
return x&-x;
} void Add(int i,int x)
{
while(i<=n)
{
tree[i]+=x;
i+=lowbit(i);
}
} int Query(int i)
{
int res=;
while(i)
{
res+=tree[i];
i-=lowbit(i);
}
return res;
} void Setval(int i,int x)
{
int v=Query(i)-Query(i-);
Add(i,-v);
Add(i,x);
} int Query(int l,int r)
{
return Query(r)-Query(l-);
} int main()
{
int T;
scanf("%d",&T);
for(int kas=;kas<=T;kas++)
{
Init();
scanf("%d",&n);
int x;
for(int i=;i<=n;i++)
{
scanf("%d",&x);
Add(i,x);
}
printf("Case %d:\n",kas);
char ch[];
int a,b;
while(scanf("%s",ch)==&&ch[]!='E')
{
scanf("%d%d",&a,&b);
if(ch[]=='A')
{
Add(a,b);
}
else if(ch[]=='S')
{
Add(a,-b);
}
else
{
int ans=Query(a,b);
printf("%d\n",ans);
}
}
}
return ;
}
【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵的更多相关文章
- [kuangbin带你飞]专题七 线段树
ID Origin Title 228 / 440 Problem A HDU 1166 敌兵布阵 207 / 438 Problem B HDU 1754 I Hate It ...
- 【算法系列学习】线段树 区间修改,区间求和 [kuangbin带你飞]专题七 线段树 C - A Simple Problem with Integers
https://vjudge.net/contest/66989#problem/C #include<iostream> #include<cstdio> #include& ...
- 【算法系列学习】线段树 单点覆盖,区间查询最大值 [kuangbin带你飞]专题七 线段树 B - I Hate It
https://vjudge.net/contest/66989#overview #include<iostream> #include<cstdio> #include&l ...
- HDU 1166 敌兵布阵 (树状数组 单点修改+区间查询)
题目链接 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和T ...
- HDU - 3001 Travelling 状压dp + 三进制 [kuangbin带你飞]专题二
终于刷完搜索专题了. 题意:给定n个城市,每个城市参观不能超过两次,两个城市之间有道路通过需要花费X,求通过能所有城市的最小花费. 思路:每个城市有三个状态0,1,2,可用三进制存储所有城市的访问状态 ...
- TZOJ 2725 See you~(二维树状数组单点更新区间查询)
描述 Now I am leaving hust acm. In the past two and half years, I learned so many knowledge about Algo ...
- 【bzoj5173】[Jsoi2014]矩形并 扫描线+二维树状数组区间修改区间查询
题目描述 JYY有N个平面坐标系中的矩形.每一个矩形的底边都平行于X轴,侧边平行于Y轴.第i个矩形的左下角坐标为(Xi,Yi),底边长为Ai,侧边长为Bi.现在JYY打算从这N个矩形中,随机选出两个不 ...
- 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询
题目描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. ...
- 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询
题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...
随机推荐
- Knockoutjs : Unable to process binding "value:
刚刚自学knockoutjs,老是碰到稀奇古怪的问题. 在自学knockout.js的时候经常遇到 Unable to process binding "value:的问题.目前总结了以下几 ...
- Asp.NetCore1.1版本没了project.json,这样来生成跨平台包
本章将要和大家分享的是Asp.NetCore1.1版本去掉了project.json后如何打包生成跨平台包, 为了更好跟进AspNetCore的发展,把之前用来做netcore开发的vs2015卸载后 ...
- Build your own linino system 编译你自己的linino系统
懒癌犯了,先简单写过程,之后有时间再补上每一步的理由吧.对着来一遍,有bug请留言,我会尝试回答.(づ ̄ 3 ̄)づ ------------------------------------------ ...
- C++枚举类型详解
原创作品,转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5171110.html 一.枚举类型的定义 enum 类型名 {枚举值表}: 类型名是变量名,指定 ...
- iOS开发之计算文字尺寸
/** * 计算文字尺寸 * * @param text 需要计算尺寸的文字 * @param font 文字的字体 * @param maxSize 文字的最大尺寸 */ - ( ...
- oStrictHostKeyChecking=no 参数
应用在脚本当中,避免使用域名链接服务器的时候,检查knows_hosts文件
- Jenkis Editable Email Notification Plugin 使用介绍
Jenkis Editable Email Notification Plugin 使用介绍 前言 Jenkins本身提供的Email插件功能实在有限,只能提供当前Job的基本信息,比如成功.失败以及 ...
- iwebshop上传类的使用
$upload = new IUpload('10240000',array('jpg','gif','png')); $dir = "upload/dian"; $upload- ...
- JS调用WebService,发布到IIS,网页提示WebService未定义[已解决]
VS2013中,JS调用WebService,一直运行正常.部署到WindowsServer2008之后,在网页中访问,始终提示网页中有错误,点开之后发现是WebService未定义. 于是上网查解决 ...
- AtCoder Beginner Contest 055题解
A.当a=1就把a改成14,b=1就把b改成14,然后比较a,b大小即可. #include <iostream> #include <algorithm> #include ...