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 主席树 在线更新的更多相关文章

  1. hdu 4348 To the moon (主席树)

    版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4348 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q ...

  2. hdu 4348 To the moon (主席树区间更新)

    传送门 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q l r:查询当前时间戳区间[l,r]中所有数的和 . (3)H ...

  3. HDU 4348 To the moon 主席树

    题意: 给出一个长度为\(n(n \leq 10^5)\)的序列,最开始时间\(t=0\),支持下面几个操作: \(C \, l \, r \, d\):将区间\([l,r]\)每个数都加上\(d\) ...

  4. hdu 4348 To the moon 主席树区间更新

    To the moon Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Prob ...

  5. 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    询问当前时 ...

  6. 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步操作 思路: ...

  7. HDU 4348 To the moon(主席树区间修改)

    题意 给你一个区间,支持如下操作: 在一段区间内加上一个值,并生成一个历史版本 查询某个版本下一段区间内的和 回到一个历史版本上并舍弃之后的版本 做法 这就是主席树区间修改裸题啦QwQ 上一篇博客我讲 ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. 系统学习(javascript)_基础(数据类型一)

    五种基本数据类型:Number,String,Boolean,Null,Undefind: 三种引用数据类型:Object,Array,Symbol: Symbol为ECMAScript6新增的数据类 ...

  2. [转]使用 C++11 编写 Linux 多线程程序

    前言 在这个多核时代,如何充分利用每个 CPU 内核是一个绕不开的话题,从需要为成千上万的用户同时提供服务的服务端应用程序,到需要同时打开十几个页面,每个页面都有几十上百个链接的 web 浏览器应用程 ...

  3. 跳出python的各种坑(1)

    2017-11-1915:38:17 一定要跳出python的各种坑,一开始遇到的好多思维上的认知错误,因为刚开始学习,对python是个什么都不清楚,所以记录一下自己遇到的各种坑.不用担心自己遇到的 ...

  4. socket系统调用

    SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) { int retval; struct socket *sock; in ...

  5. nanosleep()

    函数原型 #include <time.h> int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);   描述 ...

  6. aarch64_n3

    ntp-doc-4.2.8p10-1.fc26.noarch.rpm 2017-03-24 02:07 1.2M fedora Mirroring Project ntp-perl-4.2.8p10- ...

  7. Django BoundField

    一.BoundField from django.forms.boundfield import BoundField BoundField是一个将字段添加数据的一个类,给对应的form字段封装上数据 ...

  8. 003_ElasticSearch详解与优化设计

    简介 概念 安装部署 ES安装 数据索引 索引优化 内存优化 1简介 ElasticSearch(简称ES)是一个分布式.Restful的搜索及分析服务器,设计用于分布式计算:能够达到实时搜索,稳定, ...

  9. PHP计算字符串的长度

    <?php /** * 计算字符串的长度(汉字按照两个字符计算) * * @param string $str 字符串 * * @return int */ function str_len($ ...

  10. 原生js封装dom操作库

    var utils = (function(window) { var flag = "getComputedStyle" in window; function win(attr ...