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. C++ Primer 5th 第19章 特殊工具与技术

    C++是一种通用型语言,其设计者希望它能处理各种各样的问题,因此除了一些能适用于所有问题的语言特性,还有一些适用于特定问题的特性. 控制内存分配 某些程序对内存分配有着特殊的需求,它们不适合使用标准的 ...

  2. aarch64_o2

    opensips-event_rabbitmq-2.2.3-1.fc26.aarch64.rpm 2017-03-10 01:22 42K fedora Mirroring Project opens ...

  3. C#抓取网络图片保存到本地

    C#抓取网络图片保存到本地 System.Net.WebClient myWebClient = new System.Net.WebClient(); //将头像保存到服务器 string virP ...

  4. Ubuntu下使用Nginx+uWSGI+Flask(初体验)

    Ubuntu 18.04,Nginx 1.14.0, uWSGI 2.0.17.1,Flask, 前言 Windows不支持uWSGI!为了上线自己的项目,只能选择Linux. 自己前面开发了一个Fl ...

  5. Python2和Python3同时安装到Windows

    上月已经把Python2安装好了,安装目录和及其下的Scripts也在安装时添加到了环境变量PATH中,可以使用python命令执行程序. 安装包:python-2.7.14.amd64.msi(没有 ...

  6. MyEclipse开发工具,当选中一个单词时,其他相同的单词会被高亮显示(选中/标记)

    1.步骤: Window-->Preferences-->Java-->Editor-->Mark Occurremces下的 Mark Occurremces of the ...

  7. 强大的vi的几个功能

    1 拷贝第十行到第十三行到文件a中,不用!亦可 : 比如你要拷贝从第10行到第109行到文件123.txt中,可以用以下的命令:10,109w!123.txt

  8. 简单计算器的C实现-函数指针,main函数传参

    /** 程序功能:简单计算器,实现加减乘除平方* 作者版本日期:2015.11.08 zhouhb OK* 源代码:李明 <新概念C语言培训>第33集 C语言Shell命令解释器的实现* ...

  9. Description Resource Path Location Type The superclass "javax.servlet.http.HttpServlet" was not foun

    一段时间没亲自建新项目玩乐,今天建立了一Maven project的时候发现了以下异常,Description Resource Path Location Type The superclass & ...

  10. WinScp几个极大提高开发效率的小功能

    WinSCP 是一个 Windows 环境下使用 SSH 的开源图形化 SFTP 客户端.同时支持 SCP 协议.它的主要功能就是在本地与远程计算机间安全的复制文件. 最近研究了一下winscp的一些 ...