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)求区间和. 每个 ...
随机推荐
- 很实用且容易忘记的小命令 for Linux(更新中...)
系统相关 # 系统安装日期 sudo tune2fs -l /dev/sda1 |grep create # 查看centos版本命令 rpm -q centos-release #查看centos版 ...
- TCP三次握手(待细研究)
xu言: 看到一张不错清晰的Tcp三次握手图,收藏 Initiator 发起人 Receiver 接收者 LISTENING 状态xx服务启动后首先处于侦听(LISTENING)状态. ESTAB ...
- hdu1686字符串kmp
The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e ...
- OC Block(代码块)
#import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...
- IOS-整体框架类图
Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助. 1.Cocoa是什么? Cocoa是OS X和 iOS操作系统的程序的运行环境. 是什么因素使一个程序成为Co ...
- Activiti进阶(二)——部署流程资源的三种方式
转自:http://blog.csdn.net/zjx86320/article/details/50234707 流程资源可以是各种类型的文件,在启动流程或流程实例运行过程中会被读取.下面介绍常用的 ...
- NRF51822+STM32bootload——typedef void (*Fun) (void) 理解
1.typdef 用法如下所示 typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned ...
- PHP:第三章——PHP中的递归函数
<?php header("Content-Type:text/html;charset=utf-8"); function A(){ static $i = 0; ++$i ...
- CAS-认证流程
从结构上看cas包括两个部分,CAS server 和CAS client 需要独立部署,主要负责用户的认证工作,CAS负责处理对客户端受保护资源的访问请求,需要登录时,重新定向到CAS Server ...
- js通过class获取元素
<!doctype html> <html> <head> <meta charset="utf-8"> <meta char ...