东方14ACM小组 15:Challenge 11
Challenge 11
- 总时间限制:
- 10000ms
- 单个测试点时间限制:
- 1000ms
- 内存限制:
- 262144kB
- 描述
-
给一个长为N的数列,有M次操作,每次操作是以下两种之一:
(1)修改数列中的一个数
(2)求某次操作后连续一段的和
- 输入
- 第一行两个正整数N和M。
第二行N的整数表示这个数列。
接下来M行,每行开头是一个字符,若该字符为'M',则表示一个修改操作,接下来两个整数x和y,表示把x位置的数修改为y;若该字符为'Q',则表示一个询问操作,接下来三个整数x、y、z,表示求数列中[x,y]这段区间在第z次操作后的和。 - 输出
- 对每一个询问操作单独输出一行,表示答案。
- 样例输入
-
5 4
1 2 3 4 5
Q 2 3 0
M 3 5
Q 2 3 2
Q 1 3 1 - 样例输出
-
5
7
6 - 提示
- 1<=N<=10^5,1<=M<=10^5,输入保证合法,且所有整数及答案可用带符号32位整型存储。
- 可持久化线段树
- 鸣谢xxy学姐
-
#include<cstdio>
#include<iostream>
using namespace std;
#define N 100001
int n,m,cnt,ans;
int root[N*];
int ls[N*],sum[N*],rs[N*];
int ope[N];
void change(int l,int r,int &rt,int pre,int pos,int w)
{
if(!rt)rt=++cnt;
sum[rt]=sum[pre];
if(l==r){sum[rt]=w;return;}
int mid=(l+r)>>;
if(pos<=mid)rs[rt]=rs[pre],change(l,mid,ls[rt],ls[pre],pos,w);
else ls[rt]=ls[pre],change(mid+,r,rs[rt],rs[pre],pos,w);
sum[rt]=sum[ls[rt]]+sum[rs[rt]];
}
void query(int l,int r,int rt,int opl,int opr)
{
if(opl<=l&&opr>=r){
ans+=sum[rt];return ;
}
int mid=(l+r)>>;
if(opl<=mid)query(l,mid,ls[rt],opl,opr);
if(opr>mid)query(mid+,r,rs[rt],opl,opr);
} int main()
{
scanf("%d%d",&n,&m);
int x,y,z;
for(int i=;i<=n;i++)
scanf("%d",&x),change(,n,root[],root[],i,x);
char s[];
int now=;
for(int i=;i<=m;i++)
{
ope[i]=now;
scanf("%s",s);
if(s[]=='M')
{
now++;
ope[i]=now;
scanf("%d%d",&x,&y);
change(,n,root[now],root[now-],x,y);
}
else
{
scanf("%d%d%d",&x,&y,&z);
ans=;
query(,n,root[ope[z]],x,y);
printf("%d\n",ans);
}
}
return ;
}
东方14ACM小组 15:Challenge 11的更多相关文章
- 东方14ACM小组 Challenge 11
总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求 ...
- OpenJudge 东方14ACM小组 / 20170123 06:Challenge 3
总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求 ...
- OpenJudge 东方14ACM小组 / 20170123 02 岛屿
总时间限制: 40000ms 单个测试点时间限制: 4000ms 内存限制: 128000kB 描述 从前有一座岛屿,这座岛屿是一个长方形,被划为N*M的方格区域,每个区域都有一个确定的高度.不 ...
- 15:Challenge 11(主席树裸题)
总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求 ...
- 用pygame学习初级python(二) 15.5.11
闲得无聊,对第一版的东西做了一些修改,让它更像一个游戏,也具有一些可玩性. 项目的github地址:https://github.com/lfkdsk/BrainHole_pygame 1.人物类进行 ...
- 【JZOJ4893】【NOIP2016提高A组集训第15场11.14】过河
题目描述 数据范围 解法 由于同一个点,同一个圆盘最多只会走一次. 把(i,j)当作一个点,表示第i个点,放第i个圆盘. 那么就可以使用最短路. 时间复杂度为O(n4∗k). 事实上存在冗余圆盘,一个 ...
- Oracle 11.2.0.4 RAC重建EM案例
环境:Oracle 11.2.0.4 RAC 重建EM 背景:客户之前的EM已经被损坏,需要重建EM 重建EM的方案有很多,其中最简单的方法是:直接使用emca重建,oracle用户下,只需一条命令搞 ...
- 11 tensorflow在tf.while_loop循环(非一般循环)中使用操纵变量该怎么做
代码(操纵全局变量) xiaojie=1 i=tf.constant(0,dtype=tf.int32) batch_len=tf.constant(10,dtype=tf.int32) loop_c ...
- 15 Puzzle (4乘4谜题) IDA*(DFS策略与曼哈顿距离启发) 的C语言实现
大家好!这是我的第一篇博客,由于之前没有撰写博客的经验,并且也是初入计算机和人工智能领域,可能有些表述或者理解不当,还请大家多多指教. 一.撰写目的 由于这个学期在上算法与数据结构课程的时候,其中一个 ...
随机推荐
- springboot-vue-前后端数据交互
前端项目: pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...
- UTV - URL Tag Validation
What`s UTV 1.URL Tag Validation 2.Special format of URL for preventing unauthorized usage and access ...
- 在. net平台下,推送IOS,Android,Windows Phone消息
1,新建项目,在项目中添加引用,dll文件已经上传在百度网盘,点击下载 2,引入命名空间 using PushSharp; using PushSharp.Android; using PushSha ...
- dubbo rpc filter实现剖析(二)
2.6.3版本,之前读的是2.4.9版本 本篇主要阐述dubbo rpc的filter的实现,包括作用,用法,原理,与Spring Cloud在这些能力的对比. 整个filter列表的获取过程在 co ...
- webdriver高级应用- 测试过程中发生异常或断言失败时进行屏幕截图
封装了三个类来实现这个功能: 1.DataUtil.py 用于获取当前的日期以及时间,用于生成保存截图文件的目录名,代码如下: #encoding=utf-8 import time from dat ...
- linux随笔一
1.过滤列表输出:*表示多个字符 ll mon* 结果输出为:mongo.sh mongo_sso.sh 2.man +命令 例如:man ls 查看命令的用法 3.cd 将shell回话移动到 ...
- [办公软件篇][3]windows软件安装
http://www.jeffjade.com/2015/10/19/2015-10-18-Efficacious-win-software/
- [git 学习篇]git管理的是修改,并非文件
你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改. 为什么说Git管理的 ...
- C# TypeDescriptor获取类型转换器,实现泛型转换
需求背景 平时的coding过程中,经常性遇到string类型转换成其他的基本类型,如 int double bool等,那我们正常的方式就是下面的方式进行类型转换 int.Parse("1 ...
- 【转】Unicode utf8等编码类型的原理
原文地址http://www.cnblogs.com/daxiong2014/p/4768681.html Unicode utf8等编码类型的原理 1.ASCII码 我们知道,在计算机内部,所有的 ...