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. Anaconda 安装tensorflow(GPU)

    1.安装 如果是安装CPU模式的tensorflow,只要输入一下代码就可以了 pip3 install tensorflow #python3pip install tensorflow #pyth ...

  2. 从此编写 Bash 脚本不再难【转】

    从此编写 Bash 脚本不再难 原创 Linux技术 2017-05-02 14:30 在这篇文章中,我们会介绍如何通过使用 bash-support vim 插件将 Vim 编辑器安装和配置 为一个 ...

  3. plupload 上传组件的使用

    在这之前在感谢园子好多大牛的文章,在这里就不列出来了. 进入正题. svn检索https://github.com/moxiecode/plupload 获取到代码,这篇文章使用的是v2.1.8 主要 ...

  4. Jenkins忘记用户名密码

    一.进入C盘.jenkins配置文件中找到config.xml 需要删除一下内容: <useSecurity>true</useSecurity> <authorizat ...

  5. linux limits研究

    ---------------------------------------------------------------------------------------------------- ...

  6. python 之datetime库学习

    # -*- coding:utf-8 -*- import refrom datetime import datetime, timezone, timedelta def rec_time():   ...

  7. Extjs 基础篇—— Function基础

    这里主要是JS的基础知识,也是深入理解Ext的基础.1.参数可变长,注意跟Java还是有一点区别的.例: 1.function getUser(name,age){ 2.alert("nam ...

  8. Codeforces 963A Alternating Sum(等比数列求和+逆元+快速幂)

    题目链接:http://codeforces.com/problemset/problem/963/A 题目大意:就是给了你n,a,b和一段长度为k的只有'+'和‘-’字符串,保证n+1被k整除,让你 ...

  9. R语言学习笔记:sort、rank、order、arrange排序函数

    R语言中排序有几个基本函数:sort().rank().order().arrange() 一.总结 sort()函数是对向量进行从小到大的排序 rank()函数返回的是对向量中每个数值对应的秩 or ...

  10. mysql 导出数据库命令

    mysqldump --socket=/data/mysql/mysql.sock -uroot -pfanzhuo -d stat1> stat1.sql