uva 12086 线段树or树状数组练习
题目链接 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树状数组练习的更多相关文章
- BZOJ2120:数颜色(数状数组套主席树)(带修改的莫对)
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P ...
- 5.15 牛客挑战赛40 E 小V和gcd树 树链剖分 主席树 树状数组 根号分治
LINK:小V和gcd树 时限是8s 所以当时好多nq的暴力都能跑过. 考虑每次询问暴力 跳父亲 这样是nq的 4e8左右 随便过. 不过每次跳到某个点的时候需要得到边权 如果直接暴力gcd的话 nq ...
- Permutation UVA - 11525(值域树状数组,树状数组区间第k大(离线),log方,log)(值域线段树第k大)
Permutation UVA - 11525 看康托展开 题目给出的式子(n=s[1]*(k-1)!+s[2]*(k-2)!+...+s[k]*0!)非常像逆康托展开(将n个数的所有排列按字典序排序 ...
- UVA 11990 ”Dynamic“ Inversion(线段树+树状数组)
[题目链接] UVA11990 [题目大意] 给出一个数列,每次删去一个数,求一个数删去之前整个数列的逆序对数. [题解] 一开始可以用树状数组统计出现的逆序对数量 对于每个删去的数,我们可以用线段树 ...
- uva 12086 树状数组
树状数组 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> #i ...
- [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- UVA 1513 Movie collection (树状数组+反向存储)
题意:给你n盘歌碟按照(1....n)从上到下放,接着m个询问,每一次拿出x碟,输出x上方有多少碟并将此碟放到开头 直接想其实就是一线段的区间更新,单点求值,但是根据题意我们可以这样想 首先我们倒着存 ...
- HDU 1556 线段树或树状数组,插段求点
1.HDU 1556 Color the ball 区间更新,单点查询 2.题意:n个气球,每次给(a,b)区间的气球涂一次色,问最后每个气球各涂了几次. (1)树状数组 总结:树状数组是一个查 ...
- HDU 3966 Aragorn's Story 树链剖分+树状数组 或 树链剖分+线段树
HDU 3966 Aragorn's Story 先把树剖成链,然后用树状数组维护: 讲真,研究了好久,还是没明白 树状数组这样实现"区间更新+单点查询"的原理... 神奇... ...
随机推荐
- Singleton: this & instance
public class Singleton{ private static final Singleton instance = new Singleton(); private String na ...
- 一、html
一.html相关概念 html是 htyper text markup language 即超文本标记语言,超文本就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素,而标记语言:即标记(标签) ...
- iis 反向代理 组件 Application Request Route
安装后要重启服务器. 不然 IIS 不会生效.
- mycat 指定mycat节点
mycat 指定节点: /*!mycat:dataNode=order1*/select seq_nextval('APPOINTMENT_NO'); 指定节点创建存储过程或建表: /*!mycat: ...
- laravel 环境配置
一.composer 安装 1.确定为最新版本的PHP 2.进入Composer官网下载页面,在页面最下方Manual Download区域选择需要的版本下载. 3.将下载的composer.phar ...
- iOS开发之HelloKit代码片段
完整代码托管:https://github.com/1042710553/HelloKit.git /************************/plist/****************** ...
- nginx 代理服务器配置双向证书验证
生成证书链 用脚本生成一个根证书, 一个中间证书(intermediate), 三个客户端证书. 脚本来源于(有修改)https://stackoverflow.com/que... 中间证书的域名为 ...
- Spring笔记1——Spring起源及其核心技术
Spring的作用 当我们使用一种技术时,需要思考为什么要使用这门技术.而我们为什么要使用Spring呢?从表面上面SSH这三大框架中,Struts是负责MVC责任的分离,并且提供为Web层提供诸如控 ...
- springboot访问jsp页面
1.新建springboot项目,选择以war包的方式package; image 2.勾选Web模块,DevTools可不选(用作热部署,不影响运行) image 3.创建完成后,项目结构如 ...
- java中把指数形式的数字转为正常形式显示
/** * 当浮点型数据位数超过10位之后,数据变成科学计数法显示.用此方法可以使其正常显示. * @param value * @return Sting */ public static Stri ...