题意:n个数 m次操作
操作分别为
C l r d: 把区间[l, r] 加 d
Q l r : 查询区间[l, r]的和
H l r t: 查询时间t的时候[l, r]的和
B t: 回到时间t

思路:主席树区间修改,区间求和

 const int maxn =  + ;
const int maxnode = * maxn; int n, m; struct Node
{
int l, r;
LL sum, add;
} tr[maxnode];
int tail;
LL a[maxn];
LL qL, qR, value;
LL sum; #define lson tr[o].l,L,M
#define rson tr[o].r,M+1,R
#define self o,L,R
#define lc tr[o].l
#define rc tr[o].r void build(int o, int L, int R)
{
if (L == R)
{
tr[o].sum = a[L];
return;
}
tr[o].l = ++tail;
tr[o].r = ++tail;
int M = L + (R - L) / ;
build(lson);
build(rson);
tr[o].sum = tr[lc].sum + tr[rc].sum;
} void maintain(int o, int L, int R)
{
if (L < R)
{
tr[o].sum = tr[lc].sum + tr[rc].sum;
}
else tr[o].sum = a[L];
tr[o].sum += tr[o].add * (R - L + );
} void update(int& o, int L, int R)
{
tr[++tail] = tr[o];
o = tail;
if (qL <= L && R <= qR)
{
tr[o].add += value;
}
else
{
int M = L + (R - L) / ;
if (qL <= M) update(lson);
if (qR > M) update(rson);
}
maintain(self);
} void query(int o, int L, int R, int add)
{
if (qL <= L && R <= qR)
{
sum += tr[o].sum + add * (R - L + );
return;
}
int M = L + (R - L) / ;
if (qL <= M) query(lson, add + tr[o].add);
if (qR > M) query(rson, add + tr[o].add);
} int root[maxn];//表示第i个线段树的root是什么,显然root[0]=0 void init()
{
memset(tr, , sizeof(tr));
tail = ;
for (int i = ; i <= n; i++)
{
scanf("%lld", &a[i]);
}
root[] = ;
build(, , n);
} void solve()
{
char op[];
int t;
int i = ;
while (m--)
{
op[] = ;
scanf("%s", op);
if (op[] == 'Q')
{
scanf("%lld%lld", &qL, &qR);
sum = ;
query(root[i], , n, );
printf("%lld\n", sum); }
else if (op[] == 'C')
{
i++;
root[i] = root[i-];
scanf("%lld%lld%lld", &qL, &qR, &value);
update(root[i], , n);
}
else if (op[] == 'H')
{
scanf("%lld%lld%d", &qL, &qR, &t);
sum = ;
query(root[t], , n, );
printf("%lld\n", sum);
}
else
{
scanf("%d", &t);
i = t;
}
}
} int main()
{
while (scanf("%d%d", &n, &m) == )
{
init();
solve();
}
return ;
}

hdu 4348 To the moon的更多相关文章

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

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

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

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

  4. HDU 4348 To the moon 主席树 在线更新

    http://acm.hdu.edu.cn/showproblem.php?pid=4348 以前做的主席树没有做过在线修改的题做一下(主席树这种东西正经用法难道不是在线修改吗),标记永久化比较方便. ...

  5. HDU 4348 To the moon 可持久化线段树

    To the moon Problem Description BackgroundTo The Moon is a independent game released in November 201 ...

  6. HDU 4348 To the moon 可持久化线段树,有时间戳的区间更新,区间求和

    To the moonTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.a ...

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

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

  8. HDU 4348 To the moon(可持久化线段树)

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

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

随机推荐

  1. php的rss订阅

    一般来说我们很少自己造轮子,读取rss还是用git上的开源库吧 https://github.com/dg/rss-php 这个开源库不能读取博客园的rss订阅,新浪微博的格式显示有问题. 博客园的订 ...

  2. (function($){}) 和$(function(){}) 和$(function($){}) 区别

    请问下(function($){}) 和$(function(){}) 和$(function($){}) 有什么区别 谢谢 一.先看 jQuery(function(){ }); 全写为 jQuer ...

  3. 20145224&20145238 《信息安全系统设计基础》 第一次实验

    20145224&20145238 <信息安全系统设计基础>第一次实验 课程:信息安全系统设计基础 班级:1452 姓名:陈颢文 荆玉茗 学号:20145224 20145238 ...

  4. 并发编程 17—— Lock

    Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...

  5. jquery ui学习笔记

  6. Js获取后台集合List的值并操作html

    功能:将后台传到前端JSP的List中的float型数值转换为百分比显示 HTML代码: <s:iterator value="colorConfigList" status ...

  7. iScroll4.2.5中的无法滑动或点击的解决方案(转)

    又见iScroll问题,特别是三星手机和iPhone,顺便提一句,现在的项目中他们给div加了height属性来解决不能滚动问题,个人认为是个非常愚蠢的解决方案,我必须使用media query来解决 ...

  8. div仿textarea

    CSS代码: .test_box { width: 400px; min-height: 120px; max-height: 300px; _height: 120px; margin-left: ...

  9. Rest接口测试,巧用firebug插件

    两年前开始做软件测试,刚接触的是关于rest接口的测试.作为一个刚进职场的测试小菜鸟,当时对接口的理解并不是很充分,具体是怎么实现的也不清楚.在进行接口测试时,只是设置接口入参,调用接口,查看接口是否 ...

  10. OC方法和文件编译

    OC方法和文件编译 一.OC方法 (一)对象方法 (1)对象方法以-开头如 -(void)xx; (2)对象方法只能又对象来调用 (3)对象方法中可以访问当前对象的成员变量 (4)调用格式   [对象 ...