hdu 4348 To the moon
题意: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的更多相关文章
- 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 ...
- hdu 4348 To the moon (主席树)
版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4348 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q ...
- 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 询问当前时 ...
- HDU 4348 To the moon 主席树 在线更新
http://acm.hdu.edu.cn/showproblem.php?pid=4348 以前做的主席树没有做过在线修改的题做一下(主席树这种东西正经用法难道不是在线修改吗),标记永久化比较方便. ...
- HDU 4348 To the moon 可持久化线段树
To the moon Problem Description BackgroundTo The Moon is a independent game released in November 201 ...
- HDU 4348 To the moon 可持久化线段树,有时间戳的区间更新,区间求和
To the moonTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.a ...
- hdu 4348 To the moon 主席树区间更新
To the moon Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Prob ...
- HDU 4348 To the moon(可持久化线段树)
To the moon Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- 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步操作 思路: ...
随机推荐
- 基础笔记3(一)(String StringBuilder StringBuffer 数组)
---恢复内容开始--- 1数组.有序的同类型的集合. 2.string :字符串类型:其实就是一个字符数组.添加了private final,所以string是一个不可以变的字符串. String. ...
- Java文件操作与输入输出流
文件操作 package ch15; import java.io.*; /** * Created by Jiqing on 2016/12/28. */ public class FileTest ...
- java中的标记接口
在java 中,RandomAccess和Cloneable .Serializable一样,都是标志性接口,不需要任何实现,只是又来表明其实现类具体有某种特质的,实现了Cloneable表明可以拷贝 ...
- Error: Cannot find a valid baseurl for repo: base
解决方法如下(修改dns配置) vi /etc/resolv.conf 在此文件最后加入:nameserver 8.8.8.8 如果没有vi编辑器可用: echo "nameserver 8 ...
- setColorFilter()滤镜
----------转载于:http://blog.sina.com.cn/s/blog_5da93c8f01012pkj.html 通过setColorFilter可以实现滤镜效果. 如: ...
- SSH框架的配置
^_^阅读本文前请先浏览 : http://www.cnblogs.com/LiJinfu/p/5842890.html 步骤 : 一.编写web.xml配置文件 该文件路径在项目文件下的WebCon ...
- 用c语言编写二分查找法
二分法的适用范围为有序数列,这方面很有局限性. #include<stdio.h> //二分查找法 void binary_search(int a[],int start,int mid ...
- JAVA 十六进制与字符串的转换
public static String toHexString(int i)以十六进制的无符号整数形式返回一个整数参数的字符串表示形式.如果参数为负,那么无符号整数值为参数加上 232:否则等于该参 ...
- 省常中模拟 day2
第一题: 题目大意: 有mn颗糖,要装进k个盒子里,使得既可以平均分给n个人,也可以平均分给m个人. 求k的最小值. 解题过程: 1.先看一组小数据(13,21).那么根据贪心的原则很容易想到先拿13 ...
- c# windows编程控件学习-2
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...