题目链接   https://vjudge.net/problem/34215/origin

这个题就是线段树裸题,有两种操作,实现单点更新和区间和的查找即可,这里第一次学习使用树状数组完成。

二者相比,BIT无论从时间,空间还是代码量考虑都要优于ST,所以遇见这种求解区间和的操作考虑使用BIT。

 /*线段树 250 ms*/

 #include<bits/stdc++.h>
using namespace std;
#define M ((L+R)>>1)
#define lc (id<<1)
#define rc ((id<<1)|1)
int sumv[(<<)+];
void build(int L,int R,int id)
{
if(L==R){scanf("%d",&sumv[id]);return;}
build(L,M,lc);
build(M+,R,rc);
sumv[id]=sumv[lc]+sumv[rc];
}
void update(int L,int R,int id,int x,int y)
{
if(L==R) {sumv[id]=y;return;}
if(x<=M)update(L,M,lc,x,y);
else update(M+,R,rc,x,y);
sumv[id]=sumv[lc]+sumv[rc];
}
int ask(int L,int R,int id,int l,int r)
{
if(L>=l&&R<=r) {return sumv[id];}
if(r<=M) return ask(L,M,lc,l,r);
else if(l>M) return ask(M+,R,rc,l,r);
else return ask(L,M,lc,l,r)+ask(M+,R,rc,l,r);
}
int main()
{
int N,i,j,x,y,k=;
char s[];
while(cin>>N&&N){
build(,N,);
if(k>) puts("");
printf("Case %d:\n",++k);
while(scanf("%s",s)!=EOF){
if(!strcmp(s,"END")) break;
scanf("%d%d",&x,&y);
if(!strcmp(s,"M")) printf("%d\n",ask(,N,,x,y));
else update(,N,,x,y);
}
}
return ;
} /*树状数组 180ms */ #include<bits/stdc++.h>
using namespace std;
int sumv[+],n;
int a[+];
int lowbit(int x){return x&-x;}
int sum(int x)
{
int ret=;
while(x>){
ret+=sumv[x];
x-=lowbit(x);
}
return ret;
}
void add(int x,int d)
{
while(x<=n){
sumv[x]+=d;
x+=lowbit(x);
}
}
int main()
{
int k=;
while(scanf("%d",&n)!=EOF&&n){memset(sumv,,sizeof(sumv));
for(int i=;i<=n;++i){
int x;
scanf("%d",&x);
a[i]=x;
add(i,x);
}
char s[];
if(k>) puts("");
printf("Case %d:\n",++k);
while(scanf("%s",s)!=EOF){
if(!strcmp(s,"END")) break;
int x,y;
scanf("%d%d",&x,&y);
if(s[]=='M'){
printf("%d\n",sum(y)-sum(x-));
}
else{
add(x,y-a[x]);
a[x]=y;
}
}
}
return ;
}

uva 12086 线段树or树状数组练习的更多相关文章

  1. BZOJ2120:数颜色(数状数组套主席树)(带修改的莫对)

    墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P ...

  2. 5.15 牛客挑战赛40 E 小V和gcd树 树链剖分 主席树 树状数组 根号分治

    LINK:小V和gcd树 时限是8s 所以当时好多nq的暴力都能跑过. 考虑每次询问暴力 跳父亲 这样是nq的 4e8左右 随便过. 不过每次跳到某个点的时候需要得到边权 如果直接暴力gcd的话 nq ...

  3. Permutation UVA - 11525(值域树状数组,树状数组区间第k大(离线),log方,log)(值域线段树第k大)

    Permutation UVA - 11525 看康托展开 题目给出的式子(n=s[1]*(k-1)!+s[2]*(k-2)!+...+s[k]*0!)非常像逆康托展开(将n个数的所有排列按字典序排序 ...

  4. UVA 11990 ”Dynamic“ Inversion(线段树+树状数组)

    [题目链接] UVA11990 [题目大意] 给出一个数列,每次删去一个数,求一个数删去之前整个数列的逆序对数. [题解] 一开始可以用树状数组统计出现的逆序对数量 对于每个删去的数,我们可以用线段树 ...

  5. uva 12086 树状数组

    树状数组 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> #i ...

  6. [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...

  7. UVA 1513 Movie collection (树状数组+反向存储)

    题意:给你n盘歌碟按照(1....n)从上到下放,接着m个询问,每一次拿出x碟,输出x上方有多少碟并将此碟放到开头 直接想其实就是一线段的区间更新,单点求值,但是根据题意我们可以这样想 首先我们倒着存 ...

  8. HDU 1556 线段树或树状数组,插段求点

    1.HDU 1556  Color the ball   区间更新,单点查询 2.题意:n个气球,每次给(a,b)区间的气球涂一次色,问最后每个气球各涂了几次. (1)树状数组 总结:树状数组是一个查 ...

  9. HDU 3966 Aragorn's Story 树链剖分+树状数组 或 树链剖分+线段树

    HDU 3966 Aragorn's Story 先把树剖成链,然后用树状数组维护: 讲真,研究了好久,还是没明白 树状数组这样实现"区间更新+单点查询"的原理... 神奇... ...

随机推荐

  1. 一步一步学EF系列三【数据迁移】

    我们每篇的内容都不多,所以希望在学习的过程中最后能亲自敲一下代码 这样更有利于掌握. 我们现在接着上篇的例子,我们现在给随便的表增加一个字段 CreateTime 创建日期 运行一下 看看会怎么样 修 ...

  2. Mysql 压力测试工具 mysqlslap

    转载至文章作者:杜亦舒 链接:https://www.sdk.cn/news/4512 来源:SDK.cn 摘要:mysqlslap 是 Mysql 自带的压力测试工具,可以模拟出大量客户端同时操作数 ...

  3. [HZNUOJ] 使用Excel + Word 批量制作准考证

    一般程序设计考试或者ACM比赛都会使用临时账号登录,这时候就需要批量制作密码条 首先需要用Excel 存储队伍的信息 比如像这样分门别类的放好 然后在word 中制作好密码条样式 选择邮件->开 ...

  4. Ubuntu16.04中用et对jmeter生成的数据统计成图表

    在Ubuntu系统中,用ctrl+Alt+t 打开终端: 输入et,即打开wps: 整理需要形成图表的数据,如: 用excel生成图表,如下: 表得出的性能图表,方法: 1.工具栏中选择插入——二维折 ...

  5. ElasticSearch(六) Elasticsearch在Thinkphp5.0中的使用

    首先下载需要引入的类库 链接:https://pan.baidu.com/s/1XEXviLoWM-ypwJ_B0jXqlg 密码:u54t //Elasticsearch.zip类库压缩包地址 然后 ...

  6. Java:延迟功能的Robot在Lunix系统上会报错

    Java:延迟功能的Robot在Lunix系统上会报错 关于延迟功能的Robot: 今天开发过程中发现,本机开发好的项目,部署到Lunix服务器竟然报错!查了代码发现: Robot r = new R ...

  7. JavaScript&jQuery获取url参数方法

    JavaScript&jQuery获取url参数方法 function getUrlParam(name){ var reg = new RegExp("(^|&)" ...

  8. GATK的硬过滤

    https://software.broadinstitute.org/gatk/documentation/article.php?id=2806

  9. 仔细讨论 C/C++ 字节对齐问题⭐⭐

    原文:https://www.cnblogs.com/AlexMiller/p/5509609.html 字节对齐的原因 为了提高 CPU 的存储速度,编译器会对 struct 和 union的存储进 ...

  10. LeetCode (226):Invert Binary Tree 递归实现

    Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia:This problem was ...