PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. 【HNSDFZ2016 #6】可持久化线段树
题目描述
现有一序列 AA。您需要写一棵可持久化线段树,以实现如下操作:
A v p x
:对于版本v
的序列,给 ApAp 增加 xx.Q v l r
:对于版本v
的序列,询问 A[l,r]A[l,r] 的区间和。C v
:拷贝一份版本v
的序列,编号为当前版本总数+1
.
版本号从 11 开始;版本 11 的序列,所有元素均为 00.
格式
输入格式
第一行,两个正整数 n,mn,m,表示序列的长度和操作个数。
接下来 mm 行,每行输入一个操作,格式如题目描述
所述。
保证任何输入的数都是正整数。
输出格式
对于每一个Q
操作,输出一行一个整数,表示对应的区间和。
样例数据
样例输入
5 5
A 1 2 3
Q 1 1 4
C 1
A 2 3 2
Q 2 1 4
样例输出
3
5
解释
第一次操作后,版本1
的序列为:0 3 0 0 0
.
第二次操作询问版本1
的A[1,4]A[1,4]区间和,答案为0+3+0+0=30+3+0+0=3.
第三次操作将版本1
的序列复制到版本2
.
第四次操作后,版本2
的序列为:0 3 2 0 0
.
第五次操作询问版本2
的A[1,4]A[1,4]区间和,答案为0+3+2+0=50+3+2+0=5.
数据规模与约定
对于20%20%的数据,有n≤1000,m≤100n≤1000,m≤100.
对于40%40%的数据,有n≤100000,m≤50000n≤100000,m≤50000.
对于100%100%的数据,有n≤1000000,m≤1500000n≤1000000,m≤1500000.
对于100%100%的数据,v,p,l,rv,p,l,r均合法;为了避免爆int
,保证1≤x≤101≤x≤10.
时间限制:1s1s
空间限制:128MB
#include<cstdio>
using namespace std;
int read(){
register int x=,f=;
register char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
const int N=1.5e6+;
const int s=(<<);
struct node{int v,next;}e[N];
struct data{
int opt,ver,l,r;
}o[N];int cnt=,tot=;
int n,m,last[N],head[N],ans[N],t[s<<];
void add(int x,int y){
e[++tot]=(node){y,head[x]};head[x]=tot;
}
void updata(int x,int p){
for(x+=s;x;x>>=) t[x]+=p;
}
void del(int x,int p){
for(x+=s;x;x>>=) t[x]-=p;
}
inline int query(int l,int r){
int ret=;
for(l+=s-,r+=s+;l^r^;l>>=,r>>=){
if(!(l&)) ret+=t[l^];
if(r&) ret+=t[r^];
}
return ret;
}
void dfs(int x){
if(o[x].opt==) updata(o[x].l,o[x].r);
else if(o[x].opt==) ans[x]=query(o[x].l,o[x].r);
for(int i=head[x];i;i=e[i].next) dfs(e[i].v);
if(o[x].opt==) del(o[x].l,o[x].r);
}
int main(){
n=read();m=read();char s[];
last[]=;
for(int i=;i<=m;i++){
scanf("%s",s);o[i].ver=read();
if(s[]=='C') o[i].opt=;
else if(s[]=='A') o[i].opt=;
else o[i].opt=;
if(o[i].opt){
o[i].l=read();o[i].r=read();
add(last[o[i].ver],i);
last[o[i].ver]=i;
}
else{
add(last[o[i].ver],i);
last[++cnt]=i;
}
if(o[i].opt!=) ans[i]=-;
}
dfs();
for(int i=;i<=m;i++) if(ans[i]!=-) printf("%d\n",ans[i]);
return ;
}
PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树的更多相关文章
- 【bzoj4026】dC Loves Number Theory 可持久化线段树
题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n ...
- (bzoj4408)[FJOI2016]神秘数(可持久化线段树)
(bzoj4408)[FJOI2016]神秘数(可持久化线段树) bzoj luogu 对于一个区间的数,排序之后从左到右每一个数扫 如果扫到某个数a时已经证明了前面的数能表示[1,x],那么分情况: ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
- 【BZOJ-2653】middle 可持久化线段树 + 二分
2653: middle Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1298 Solved: 734[Submit][Status][Discu ...
- HDU 4866 Shooting(持久化线段树)
view code//第二道持久化线段树,照着别人的代码慢慢敲,还是有点不理解 #include <iostream> #include <cstdio> #include & ...
- 【BZOJ-3653】谈笑风生 DFS序 + 可持久化线段树
3653: 谈笑风生 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 628 Solved: 245[Submit][Status][Discuss] ...
- 【BZOJ3673】&&【BZOJ3674】: 可持久化并查集 by zky 可持久化线段树
没什么好说的. 可持久化线段树,叶子节点存放父亲信息,注意可以规定编号小的为父亲. Q:不是很清楚空间开多大,每次询问父亲操作后修改的节点个数是不确定的.. #include<bits/stdc ...
- 【BZOJ3207】花神的嘲讽计划I 可持久化线段树/莫队
看到题目就可以想到hash 然后很自然的联想到可持久化权值线段树 WA:base取了偶数 这道题还可以用莫队做,比线段树快一些 可持久化线段树: #include<bits/stdc++.h&g ...
- 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之
最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...
随机推荐
- 3、C#核心编程结构下
本学习主要参考Andrew Troelsen的C#与.NET4高级程序设计,这小节主要述说以下几个东西: 这一小节是上一小节的补充,主要涉及到一下的知识细节: 1.C#方法的各种细节 2.探讨out ...
- 仓位管理 – 1.理论篇
看到文章标题中的"仓位管理",读者可能会认为它只适用于股市投资.其实不然.只要是投资都涉及到风险.回报率.投资额度,都会涉及到仓位管理.再者,人生本身就带着无数的抉择.风险和回报, ...
- Rafy 框架 - 插件级别的扩展点
本章说明如何使用额外的插件(如客户化插件)对另一插件(如产品插件)进行扩展. 使用场景 在 产品线工程 中,项目的研发分为领域工程和应用工程.这个过程中会需要对领域工程中的内容进行大量的扩展. ...
- MVC5+EF6+AutoMapper+Bootstrap打造在线博客(1.1)
DAL层的三个Model类: 字典表:CFDict 用户表:CFUser 用户爱好表:CFUserHobby(关联cfuser表和cfdict表) CFUser表和CFUserHobby表是一对多关系 ...
- Gradle project sync failed
在Android Studio中运行APP时出现了以下错误: gradle project sync failed. please fix your project and try again 解决的 ...
- SSH中Action的单例与多例
Structs2中的Bean默认的是单例,在整个程序运行期间,每个Bean只有一个实例,只要程序在运行,这个实例就一直存在. 对于Action来说,单例就容易出问题.如果客户端每次提交的参数都是一样的 ...
- openresty 前端开发序
还记得第一次尝试前后端分离的时候,是使用nginx + react 构建的spa应用,后端是java,主要处理业务逻辑逻辑部分,返回json数据,在nginx里面配置好html + js纯静态文件,再 ...
- TypeScript之面向对象初体验
1.安装nodejs和vscode: nodejs : https://nodejs.org/en/ Visual Studio Code : https://www.visualstudio.co ...
- MongoDB集群卡死问题
一年前搭了个MongoDB集群,跑得还算不错,但是有几次遇到过服务卡死的问题.处理起来已经得心应手了,拿来跟大家分享一下: 故障现象: 业务查询缓慢,而且会有连接异常: { "serverU ...
- 织梦cms常用标签
dedecms简介:织梦内容管理系统(DedeCms) 以简单.实用.开源而闻名,是国内知名的PHP开源网站管理系统,也是使用用户较多的PHP类CMS系统,在经历多年的发展,目前的版本无论在功能,还是 ...