数列的单点修改、区间求和

树状数组或线段树入门题

 #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 敌兵布阵 树状数组/线段树的更多相关文章

  1. hdu1166敌兵布阵&&hdu1754I Hate It(线段树入门)

    单点更新是最最基础的线段树,只更新叶子节点,然后把信息用pushup这个函数更新上来. http://acm.hdu.edu.cn/showproblem.php?pid=1166 update单点更 ...

  2. 洛谷P2414 阿狸的打字机 [NOI2011] AC自动机+树状数组/线段树

    正解:AC自动机+树状数组/线段树 解题报告: 传送门! 这道题,首先想到暴力思路还是不难的,首先看到y有那么多个,菜鸡如我还不怎么会可持久化之类的,那就直接排个序什么的然后按顺序做就好,这样听说有7 ...

  3. 树状数组 && 线段树应用 -- 求逆序数

    参考:算法学习(二)——树状数组求逆序数 .线段树或树状数组求逆序数(附例题) 应用树状数组 || 线段树求逆序数是一种很巧妙的技巧,这个技巧的关键在于如何把原来单纯的求区间和操作转换为 求小于等于a ...

  4. hdu1394(枚举/树状数组/线段树单点更新&区间求和)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 题意:给出一个循环数组,求其逆序对最少为多少: 思路:对于逆序对: 交换两个相邻数,逆序数 +1 ...

  5. hdu 1166:敌兵布阵(树状数组 / 线段树,入门练习题)

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

  6. hdu 5147 Sequence II【树状数组/线段树】

    Sequence IITime Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...

  7. HDU - 1166 敌兵布阵 方法一:(线段树+单点修改,区间查询和) 方法二:利用树状数组

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

  8. hdu 1166 敌兵布阵——(区间和)树状数组/线段树

    pid=1166">here:http://acm.hdu.edu.cn/showproblem.php?pid=1166 Input 第一行一个整数T.表示有T组数据. 每组数据第一 ...

  9. HDU 1166 敌兵布阵 树状数组||线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=1166 题目大意: 给定n个数的区间N<=50000,还有Q个询问(Q<=40000)求区间和. 每个 ...

随机推荐

  1. C#获取类库(DLL)的绝对路径

    C#中当我们在写公共的类库的时候难免会调用一些xml配置文件,而这个配置文件的路径则非常重要,常用的方式就是写在web.config中,而我们也可以将配置文件直接放在dll的同级目录,那么怎么获得当前 ...

  2. codeforces 559b//Equivalent Strings// Codeforces Round #313(Div. 1)

    题意:定义了字符串的相等,问两串是否相等. 卡了时间,空间,不能新建字符串,否则会卡. #pragma comment(linker,"/STACK:1024000000,102400000 ...

  3. intel python加速效果初探

    python3安装intel的加速库: conda config --add channels intel conda create --name intelpy intelpython3_full ...

  4. ES profile 性能优化用——返回各个shard的耗时

    Profile API 都说要致富先修路,要调优当然需要先监控啦,elasticsearch在很多层面都提供了stats方便你来监控调优,但是还不够,其实很多情况下查询速度慢很大一部分原因是糟糕的查询 ...

  5. PHP:第四章——PHP数组array_intersect计算数组交集

    <pre> <?php //array_intersect计算数组交集 header("Content-Type:text/html;charset=utf-8" ...

  6. 什么是 SSO 与 CAS?

    SSO SSO 是英文 Single Sign On 的缩写,翻译过来就是单点登录.顾名思义,它把两个及以上个产品中的用户登录逻辑抽离出来,达到只输入一次用户名密码,就能同时登录多个产品的效果. 打个 ...

  7. 一个Flex 对话框的坑

    最近在项目中遇到一个问题,在Flex中使用Alert.show("this is content!", "title");发现对话框可以弹出来,但是文本始终不显 ...

  8. 什么是 dynaTrace Ajax

    随着 jQuery.Dojo.YUI 等框架的兴起让构建 Web2.0 应用更加容易,但随之带来的定位等应用问题也越来越难,尤其是与性能相关的.dynaTrace Ajax Edition 是一个强大 ...

  9. L1-012 计算指数

    真的没骗你,这道才是简单题 —— 对任意给定的不超过 10 的正整数 n,要求你输出 2​n​​.不难吧? 输入格式: 输入在一行中给出一个不超过 10 的正整数 n. 输出格式: 在一行中按照格式  ...

  10. 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...