题意:n个数, m个操作

1. C l r d  给[l, r]区间的每个数加上d
2. Q l r:   查询[l, r]区间的和
3. H l r t: 查询第t个操作时[l, r]区间的和
4. B t:     回到第t个操作之后

因为有查询历史的区间和,故用主席树(保留了历史)

区间更新直接更新到每个子节点即可

出题人的题解   神么链接都打不开

 #define lson l, m
#define rson m+1, r const int N=1e5+;
const double eps=1e-;
int L[N<<], R[N<<], sum[N<<];
LL ans[N<<];
int tot;
int a[N], T[N], Hash[N]; void pushup(int rt)
{
ans[rt]=ans[L[rt]]+ans[R[rt]];
} int build(int l, int r)
{
int rt=(++tot);
sum[rt]=;
if(l==r)
{
scanf("%I64d", &ans[rt]);
L[rt]=R[rt]=;
return rt;
}
int m=(l+r)>>;
L[rt]=build(lson);
R[rt]=build(rson);
pushup(rt);
return rt;
} int update(int pre, int _L, int _R, int l, int r, LL x)
{
int rt=(++tot);
L[rt]=L[pre], R[rt]=R[pre], sum[rt]=sum[pre], ans[rt]=ans[pre]+x*(_R-_L+);
if(_L<=l && r<=_R)
{
sum[rt]+=x;
return rt;
}
int m=(l+r)>>;
if(_R<=m)
L[rt]=update(L[pre], _L, _R, lson, x);
else if(_L>m)
R[rt]=update(R[pre], _L, _R, rson, x);
else
{
L[rt]=update(L[rt], _L, m, lson, x);
R[rt]=update(R[rt], m+, _R, rson, x);
}
return rt;
} LL query(int rt, int _L, int _R, int l, int r)
{
LL cnt=sum[rt]*(LL)(_R-_L+);
if(_L<=l && r<=_R)
return ans[rt];
int m=(l+r)>>;
if(_R<=m)
cnt+=query(L[rt], _L, _R, lson);
else if(_L>m)
cnt+=query(R[rt], _L, _R, rson);
else
{
cnt+=query(L[rt], _L, m, lson);
cnt+=query(R[rt], m+, _R, rson);
}
return cnt;
} int main()
{
int n, m;
while(~scanf("%d%d", &n, &m))
{
tot=;
T[]=build(, n);
int time=;
while(m--)
{
char op[];
scanf("%s", op);
if(op[]=='Q')
{
int l, r;
scanf("%d%d", &l, &r);
printf("%I64d\n", query(T[time], l, r, , n));
}
else if(op[]=='C')
{
int l, r;
LL x;
scanf("%d%d%I64d", &l, &r, &x);
T[time+]=update(T[time++], l, r, , n, x);
}
else if(op[]=='H')
{
int l, r, rt;
scanf("%d%d%d", &l, &r, &rt);
printf("%I64d\n", query(T[rt], l, r, , n));
}
else
scanf("%d", &time);
}
}
return ;
}

HDOJ 4348

[主席树]HDOJ4348 To the moon的更多相关文章

  1. 【HDU4348】【主席树】To the moon

    Problem Description BackgroundTo The Moon is a independent game released in November 2011, it is a r ...

  2. To the moon HDU - 4348 (主席树,区间修改)

    Background To The Moon is a independent game released in November 2011, it is a role-playing adventu ...

  3. hdu4348 To the moon (主席树 || 离线线段树)

    Problem Description Background To The Moon is a independent game released in November 2011, it is a ...

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

  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 (主席树区间更新)

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

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

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

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

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

  9. [HDU4348]To the moon(主席树+标记永久化)

    学可持久化treap的时候才发现自己竟然没写过需要标记下传的主席树,然而现在发现大部分操作都可以标记永久化,下传会增大占用空间. 这题一种写法是和普通的线段树一样标记下传,注意所有修改操作(包括put ...

随机推荐

  1. VHDL基本常识

    std_logic_vector和integer需要通过signed或unsigned进行间接转换(强制转换) a_std <= std_logic_vector(to_unsigned(a_i ...

  2. FPGA统计摄像头输出-基于MD9T112

    FPGA HDL源程序 FPGA统计摄像头的输出像素,窗口尺寸等等 //---------------------------------------------------------------- ...

  3. 获取SilverLight.Web项目中路径Uri

    方法一: //获取指定要呈现的xaml内容的包活xaml文件Uri var strFullUrl = Application.Current.Host.Source.AbsoluteUri; if ( ...

  4. Scrapy源码学习(二)

    上次说到scrapy_home/scrapy/commands包下每个模块对应了scrapy命令行中的一个命令,他们都继承自command.py模块中ScrapyCommand这个类,这次就来简单看一 ...

  5. python自学笔记二

    :#进入循环重输文0件名 pass else:#退出循环,等待创建 break fobj = open(fname,'a')#打开或创建文件 #接下来写入文件 all = [] print('ente ...

  6. c#中的结构与枚举

    结构 与c++不同的是,结构应该定义在命名空间或者类里面,成员变量叫字段,字段并且有访问控制符,每个字段前要加一个下划线 例子 using System; using System.Collectio ...

  7. 【转】如何在 Windows 中执行干净启动

    完成故障排除后,请执行以下步骤将计算机重置为正常启动. Windows 8.1 和 Windows 8 从屏幕右边缘滑入,然后点按“搜索”.您也可以将鼠标指向屏幕的右下角,然后单击“搜索”. 在搜索框 ...

  8. poj 3740 Easy Finding 二进制压缩枚举dfs 与 DLX模板详细解析

    题目链接:http://poj.org/problem?id=3740 题意: 是否从0,1矩阵中选出若干行,使得新的矩阵每一列有且仅有一个1? 原矩阵N*M $ 1<= N <= 16 ...

  9. scanf gets fgets区别与联系 puts fputs printf区别与联系

    组一:scanf( )函数 gets( )函数    fgets()函数都可用于输入字符串, 组二:printf( )函数 puts( )函数 fputs()函数则用于字符串的输出. 两组内部函数各有 ...

  10. Google面试题及答案

    1. 村子里有100对夫妻,其中每个丈夫都瞒着自己的妻子偷情...村里的每个妻子都能立即发现除自己丈夫之外的其他男人是否偷情,唯独不知道她自己的丈夫到底有没有偷情.村里的规矩不容忍通奸.任何一个妻子, ...