HDU 4348 To the moon 主席树 在线更新
http://acm.hdu.edu.cn/showproblem.php?pid=4348
以前做的主席树没有做过在线修改的题做一下(主席树这种东西正经用法难道不是在线修改吗),标记永久化比较方便。
前面眼瞎爆了一次空间改过来之后交第二次奇迹一样a了,好久没有1A过了(泪)。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define LL long long
const int maxn=;
int n,m;
char s[]={};
int t[maxn]={},shu[maxn]={},lc[maxn*]={},rc[maxn*]={};
LL sum[maxn*]={},ad[maxn*]={},cnt=;
int tot=;
void build(int &x,int l,int r){
x=++tot;
//cout<<l<<r<<endl;
if(l==r){scanf("%lld",&sum[x]); return;}
int mid=(l+r)/;
build(lc[x],l,mid);
build(rc[x],mid+,r);
sum[x]=sum[lc[x]]+sum[rc[x]];
}
void updata(int x,int l,int r){
sum[x]=sum[lc[x]]+sum[rc[x]]+ad[x]*(LL)(r-l+);
}
void getadd(int &x,int y,int l,int r,int zl,int zr,LL z){
x=++tot;sum[x]=sum[y];ad[x]=ad[y];lc[x]=lc[y];rc[x]=rc[y];
if(zl<=l&&r<=zr){sum[x]=sum[y]+z*(LL)(r-l+);ad[x]+=z; return;}
int mid=(l+r)/;
if(zl<=mid)getadd(lc[x],lc[y],l,mid,zl,zr,z);
if(mid<zr)getadd(rc[x],rc[y],mid+,r,zl,zr,z);
updata(x,l,r);
}
LL gethis(int x,int l,int r,int zl,int zr,LL zhi){
if(zl<=l&&r<=zr){return sum[x]+zhi*(LL)(r-l+);}
int mid=(l+r)/;LL ans=;
if(zl<=mid)ans+=gethis(lc[x],l,mid,zl,zr,zhi+ad[x]);
if(mid<zr)ans+=gethis(rc[x],mid+,r,zl,zr,zhi+ad[x]);
return ans;
}
int main(){
int fla=;
while(~scanf("%d%d",&n,&m)){
if(fla)printf("\n");++fla;
tot=;cnt=;
build(t[],,n);shu[]=tot;
int x,y,z;
for(int i=;i<=m;i++){
scanf("%s",s);
if(s[]=='C'){
scanf("%d%d%d",&x,&y,&z);
cnt++;t[cnt]=t[cnt-];
getadd(t[cnt],t[cnt],,n,x,y,z);
shu[cnt]=tot;
}
else if(s[]=='Q'){
scanf("%d%d",&x,&y);
printf("%lld\n",gethis(t[cnt],,n,x,y,));
}
else if(s[]=='H'){
scanf("%d%d%d",&x,&y,&z);
printf("%lld\n",gethis(t[z],,n,x,y,));
}
else{
scanf("%d",&x);
cnt=x;tot=shu[x];
}
}
}
return ;
}
HDU 4348 To the moon 主席树 在线更新的更多相关文章
- hdu 4348 To the moon (主席树)
版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4348 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q ...
- hdu 4348 To the moon (主席树区间更新)
传送门 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q l r:查询当前时间戳区间[l,r]中所有数的和 . (3)H ...
- HDU 4348 To the moon 主席树
题意: 给出一个长度为\(n(n \leq 10^5)\)的序列,最开始时间\(t=0\),支持下面几个操作: \(C \, l \, r \, d\):将区间\([l,r]\)每个数都加上\(d\) ...
- hdu 4348 To the moon 主席树区间更新
To the moon Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Prob ...
- hdu 4348 To the moon (主席树 区间更新)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4348 题意: 4种操作: C l r c 区间[l,r]加c,时间+1 Q l r 询问当前时 ...
- HDU 4348 To the moon(主席树 区间更新)题解
题意: 给一个数组A[1] ~ A[n],有4种操作: Q l r询问l r区间和 C l r v给l r区间每个数加v H l r t询问第t步操作的时候l r区间和 B t返回到第t步操作 思路: ...
- HDU 4348 To the moon(主席树区间修改)
题意 给你一个区间,支持如下操作: 在一段区间内加上一个值,并生成一个历史版本 查询某个版本下一段区间内的和 回到一个历史版本上并舍弃之后的版本 做法 这就是主席树区间修改裸题啦QwQ 上一篇博客我讲 ...
- HDU 4348 To the moon (主席树区间更新)
题意:首先给你n个数,开始时间为0,最后按照操作输出 给你四种操作: 1. C l r d : 在(l,r)区间都加上d,时间加一2. Q l r : 询问现在(l,r)的区间和3. H l r ...
- HDU 4348.To the moon SPOJ - TTM To the moon -可持久化线段树(带修改在线区间更新(增减)、区间求和、查询历史版本、回退到历史版本、延时标记不下放(空间优化))
To the moon Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
随机推荐
- Spring4笔记11--SSH整合2--SpringWeb
SSH 框架整合技术: 2. Spring 在 Web 项目中的使用(建立在Spring与Hibernate整合的基础上): 在 Web 项目中使用 Spring 框架,首先要解决在 Servlet ...
- 洛谷 P4175: bzoj 1146: [CTSC2008]网络管理
令人抓狂的整体二分题.根本原因还是我太菜了. 在学校写了一个下午写得头晕,回家里重写了一遍,一个小时就写完了--不过还是太慢. 题目传送门:洛谷P4175. 题意简述: 一棵 \(n\) 个结点的树, ...
- flask插件系列之flask_uploads上传文件
前言 flask可以实现上传文件和下载文件的基本功能,但如果想要健壮的功能,使用flask_uploads插件是十分方便的. 安装 pip install flask_uploads 基本使用 # e ...
- Shell-help格式详解
前言 linux shell命令通常可以通过-h或--help来打印帮助说明,或者通过man命令来查看帮助,有时候我们也会给自己的程序写简单的帮助说明,其实帮助说明格式是有规律可循的 帮助示例 下面是 ...
- python基础===一行 Python 代码实现并行(转)
原文:https://medium.com/building-things-on-the-internet/40e9b2b36148 译文:https://segmentfault.com/a/119 ...
- HDU 6214 Smallest Minimum Cut 最小割,权值编码
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6214 题意:求边数最小的割. 解法: 建边的时候每条边权 w = w * (E + 1) + 1; 这 ...
- Linux下配置Samba服务器全过程
Linux下配置Samba服务器全过程 user级别的samba的配置 http://www.linuxidc.com/Linux/2014-11/109234.htm http://www.linu ...
- python进阶学习之匿名函数lambda
定义: lambda 参数列表:return(表达式) 匿名函数的表达式,只允许有一个. 匿名函数一般用于较简单的情况. 实例1: 实例2,配合高阶函数filter()使用: filter()函数是 ...
- MICROSOFT SQLSERVER 总结
--语 句 功 能--数据操作Select --从数据库表中检索数据行和列Insert --向数据库表添加新数据行Delete --从数据库表中删除数据行Update --更新数据库表中的数据--数据 ...
- Django杂记
django 中 slice 和 truncatewords 不同用法 django中取一段字符串中的前 N 个字符,可以用 slice和truncatewords ,但是两者是有区别的. djang ...