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)求区间和. 每个 ...
随机推荐
- Unity中的文件
Unity中的文件大致分为一下几类: 1.资源文件: 导入后,除非是修改,否则不会变化的文件.例如:fbx文件.贴图文件.音频文件.视频文件.动画文件等. 这些文件在导入到Unity的时候,都会进行转 ...
- 手把手教你开发jquery插件(三)
First, i want to add options to Tabs constructor like this: var tabs = $("div.tabs").tabs( ...
- 20170706wdVBA正则表达式提取题目
Public Sub GetContents() Dim Reg As Object Dim Matches As Object Dim OneMatch As Object Dim Index As ...
- 42 前端HTML
HTML 1. 概念 HTML 超文本标记语言(Hypertext Markup Language, HTML)是一种用于创建网页的标记语言 . 2.标签 Meta标签 <me ...
- 我的Java学习笔记-语法
Java的语法与C#的语法基本都一样,毕竟都是面向对象编程语言.下面记录下Java独有的和我在C#中学习不熟的语法知识 一.Java是解释型语言 二.Java修饰符 1. 访问控制修饰符 defaul ...
- python-day7-数字类型的内置方法
#=====>part1:数字类型#掌握:int,float#了解:Long(在python2中才有),complex# num=10# num=int(10)# print(type(num) ...
- uva-11426-数论
https://vjudge.net/problem/UVA-11426#author=0 求 SUM{ gcd(i,j) | 1<=i<j<=n}, n<4000001. 令 ...
- OAF在打开的新页面中添加按钮,功能是关闭当前页面
OAF在打开的新页面中添加按钮,功能是关闭当前页面 javascript:close()
- 多态性&& 虚函数 && 抽象类
http://www.cnblogs.com/CaiNiaoZJ/archive/2011/08/11/2134673.html 多态性 指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动 ...
- ECC算法整理纪要
初始ECC算法 1.用户A 密钥生成 (1):用随机数发生器产生随机数k∈[1,n-1]: (2):计算椭圆曲线点PA=[k]G,为公钥,k为用户A私钥: 2. 用户B加密算法及流程 设需要发送的消息 ...