hdu1166 敌兵布阵 树状数组/线段树
数列的单点修改、区间求和
树状数组或线段树入门题
#include<stdio.h>
#include<string.h> int c[],N; void add(int x,int a){
while(x<=N){
c[x]+=a;
x+=(x&-x);
}
return;
} int sum(int x){
int t=;
while(x){
t+=c[x];
x-=(x&-x);
}
return t;
} int main(){
int T;
while(scanf("%d",&T)!=EOF){
for(int q=;q<=T;q++){
printf("Case %d:\n",q);
memset(c,,sizeof(c));
scanf("%d",&N);
int i,t;
for(i=;i<=N;i++){
scanf("%d",&t);
add(i,t);
}
char s[];
while(scanf("%s",s)){
// printf("%s\n",s);
if(s[]=='S'){
scanf("%d%d",&i,&t);
add(i,-t);
}
else if(s[]=='A'){
scanf("%d%d",&i,&t);
add(i,t);
}
else if(s[]=='Q'){
scanf("%d%d",&i,&t);
printf("%d\n",sum(t)-sum(i-));
}
else if(s[]=='E')break;
}
}
}
return ;
}
树状数组
#include<stdio.h>
#include<string.h>
const int maxm=; char s[];
int a[maxm],st[maxm<<]; void build(int o,int l,int r){
if(l==r){
st[o]=a[l];
return;
}
int m=l+((r-l)>>);
build(o<<,l,m);
build(o<<|,m+,r);
st[o]=st[o<<]+st[o<<|];
} void update(int o,int l,int r,int x,int c){
if(l==r){
st[o]+=c;
return;
}
int m=l+((r-l)>>);
if(x<=m)update(o<<,l,m,x,c);
if(x>=m+)update(o<<|,m+,r,x,c);
st[o]=st[o<<]+st[o<<|];
} int query(int o,int l,int r,int ql,int qr){
if(ql<=l&&qr>=r)return st[o];
int m=l+((r-l)>>);
int ans=;
if(ql<=m)ans+=query(o<<,l,m,ql,qr);
if(qr>=m+)ans+=query(o<<|,m+,r,ql,qr);
return ans;
} int read(){
int x=;
char c=getchar();
while(c>''||c<'')c=getchar();
while(c>=''&&c<=''){
x=x*+c-'';
c=getchar();
}
return x;
} int main(){
int T=read();
for(int q=;q<=T;q++){
int n=read();
int i;
for(i=;i<=n;i++)a[i]=read();
build(,,n);
printf("Case %d:\n",q);
while(){
scanf("%s",s);
if(s[]=='Q'){
int ql=read();
int qr=read();
printf("%d\n",query(,,n,ql,qr));
}
else if(s[]=='A'){
int x=read();
int c=read();
update(,,n,x,c);
}
else if(s[]=='S'){
int x=read();
int c=read();
update(,,n,x,-c);
}
else if(s[]=='E')break;
}
}
return ;
}
线段树
hdu1166 敌兵布阵 树状数组/线段树的更多相关文章
- hdu1166敌兵布阵&&hdu1754I Hate It(线段树入门)
单点更新是最最基础的线段树,只更新叶子节点,然后把信息用pushup这个函数更新上来. http://acm.hdu.edu.cn/showproblem.php?pid=1166 update单点更 ...
- 洛谷P2414 阿狸的打字机 [NOI2011] AC自动机+树状数组/线段树
正解:AC自动机+树状数组/线段树 解题报告: 传送门! 这道题,首先想到暴力思路还是不难的,首先看到y有那么多个,菜鸡如我还不怎么会可持久化之类的,那就直接排个序什么的然后按顺序做就好,这样听说有7 ...
- 树状数组 && 线段树应用 -- 求逆序数
参考:算法学习(二)——树状数组求逆序数 .线段树或树状数组求逆序数(附例题) 应用树状数组 || 线段树求逆序数是一种很巧妙的技巧,这个技巧的关键在于如何把原来单纯的求区间和操作转换为 求小于等于a ...
- hdu1394(枚举/树状数组/线段树单点更新&区间求和)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给出一个循环数组,求其逆序对最少为多少: 思路:对于逆序对: 交换两个相邻数,逆序数 +1 ...
- hdu 1166:敌兵布阵(树状数组 / 线段树,入门练习题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 5147 Sequence II【树状数组/线段树】
Sequence IITime Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- HDU - 1166 敌兵布阵 方法一:(线段树+单点修改,区间查询和) 方法二:利用树状数组
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- hdu 1166 敌兵布阵——(区间和)树状数组/线段树
pid=1166">here:http://acm.hdu.edu.cn/showproblem.php?pid=1166 Input 第一行一个整数T.表示有T组数据. 每组数据第一 ...
- HDU 1166 敌兵布阵 树状数组||线段树
http://acm.hdu.edu.cn/showproblem.php?pid=1166 题目大意: 给定n个数的区间N<=50000,还有Q个询问(Q<=40000)求区间和. 每个 ...
随机推荐
- elementUI和iview兼容么
听说iview的作者居然是91年的,我要赶快加油了. https://zhuanlan.zhihu.com/p/25739512
- 雷林鹏分享:C# 事件(Event)
C# 事件(Event) 事件(Event) 基本上说是一个用户操作,如按键.点击.鼠标移动等等,或者是一些出现,如系统生成的通知.应用程序需要在事件发生时响应事件.例如,中断.事件是用于进程间通信. ...
- WPF中的动画
动画无疑是WPF中最吸引人的特色之一,其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互.这里我们讨论一下故事板. 在WPF中我们采用Storyboard(故事板)的方式来编写动画,为了对St ...
- 20170612xlVBA含方框文档填表
Sub mainProc() Application.ScreenUpdating = False Application.DisplayAlerts = wdAlertsNone 'Dim xlAp ...
- python 爬虫之为什么使用opener对象以及为什么要创建全局默认的opener对象
基本的urlopen()函数不支持验证.cookie或其他HTTP高级功能.要支持这些功能,必须使用build_opener()函数来创建自己的自定义Opener对象. install_opener( ...
- Oracle 小函数的使用
1.Oracle 正则表达式 经常会有一种需求是查询某个字符在字符串中的数量,可以使用正则表达式regexp_count函数 比如 SELECT regexp_count('0,1,1',',') f ...
- 【转】C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码
本文介绍在 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码.网上文章大多只是简单介绍内置参数的设置,根据我的使用目的,增加了自定义目标二维码图片尺寸和白边 ...
- PADS Layout如何进行“ECO对比更新”
我们在画PCB中,经常会遇到要修改封装等操作.不推荐直接在pcb中非ECO模式下修改,这样会和orcad原理图不同步.我们采用修改orcad原理图,然后由pads layout软件来自动修改pads ...
- Drawing house
截图如下: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> & ...
- Python Django 之 MVT
一.Django的MVT模式 M: Model, 模型 与MVC中的M相同,负责对数据的处理 V: View, 视图 与MVC中的C类似,负责处理用户请求,调用M和T,响应请求 T: Template ...