hdu4348
题解:
因为卡空间,所以直接到spoj上面去做了
区间修改的线段树
但是加lazy会把之前的操作修改
正确的解法是lazy不下传,只是在当前计算
但是听说可以记录时间的下传,我弱弱不会
代码:
- #include<cstdio>
- #include<cmath>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N=;
- typedef long long ll;
- struct aa
- {
- int lc,rc,l,r;
- ll add,sum;
- int len(){return r-l+;}
- }a[N*];
- int n,m,rt[N],time,tot,Time[N];
- void build(int &u,int l,int r)
- {
- u=++tot;
- a[u].l=l,a[u].r=r;
- if (l==r) {scanf("%lld",&a[u].sum);return;}
- int mid=(l+r)>>;
- build(a[u].lc,l,mid);
- build(a[u].rc,mid+,r);
- a[u].sum=a[a[u].lc].sum+a[a[u].rc].sum;
- }
- void insert(int &now,int old,int l,int r,ll d)
- {
- now=++tot;
- a[now]=a[old];
- if (a[old].l==l&&a[old].r==r)
- {
- a[now].add+=d;
- return;
- }
- a[now].sum+=d*(r-l+);
- int mid=(a[now].l+a[now].r)>>;
- if (r<=mid) insert(a[now].lc,a[old].lc,l,r,d);
- else if (mid<l) insert(a[now].rc,a[old].rc,l,r,d);
- else
- {
- insert(a[now].lc,a[old].lc,l,mid,d);
- insert(a[now].rc,a[old].rc,mid+,r,d);
- }
- }
- ll query(int u,int l,int r)
- {
- ll tmp=a[u].add*(r-l+);
- if (a[u].l==l&&a[u].r==r) return a[u].sum+tmp;
- int mid=(a[u].l+a[u].r)>>;
- if (r<=mid) return tmp+query(a[u].lc,l,r);
- else if (mid<l) return tmp+query(a[u].rc,l,r);
- return tmp+query(a[u].lc,l,mid)+query(a[u].rc,mid+,r);
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- build(rt[],,n);
- time=;
- char ch[];
- int x,y,t;ll d;
- for (int i=;i<=m;i++)
- {
- scanf("%s",ch);
- if (ch[]=='C')
- {
- scanf("%d%d%lld",&x,&y,&d);
- time++;
- insert(rt[time],rt[time-],x,y,d);
- Time[time]=tot;
- }
- if (ch[]=='Q')
- {
- scanf("%d%d",&x,&y);
- printf("%lld\n",query(rt[time],x,y));
- }
- if (ch[]=='H')
- {
- scanf("%d%d%d",&x,&y,&t);
- printf("%lld\n",query(rt[t],x,y));
- }
- if (ch[]=='B')
- {
- scanf("%d",&time);
- tot=Time[time];
- }
- }
- return ;
- }
hdu4348的更多相关文章
- [HDU4348]To the moon(主席树+标记永久化)
学可持久化treap的时候才发现自己竟然没写过需要标记下传的主席树,然而现在发现大部分操作都可以标记永久化,下传会增大占用空间. 这题一种写法是和普通的线段树一样标记下传,注意所有修改操作(包括put ...
- HDU4348 To the moon
Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Description Backgrou ...
- 【主席树】【bzoj2161】[hdu4348]
#include<cstdio> #include<algorithm> #include<cstring> #define N 400000 using name ...
- hdu4348 - To the moon 可持久化线段树 区间修改 离线处理
法一:暴力! 让干什么就干什么,那么久需要可持久化线段树了. 但是空间好紧.怎么破? 不down标记好了! 每个点维护sum和add两个信息,sum是这段真实的和,add是这段整体加了多少,如果这段区 ...
- 【HDU4348】【主席树】To the moon
Problem Description BackgroundTo The Moon is a independent game released in November 2011, it is a r ...
- 可持久化线段树——区间更新hdu4348
和线段树类似,每个结点也要打lazy标记 但是lazy标记和线段树不一样 具体区别在于可持久化后lazy-tag不用往下传递,而是固定在这个区间并不断累加,变成了这个区间固有的性质(有点像分块的标记了 ...
- hdu4348区间更新的主席树+标记永久化
http://acm.hdu.edu.cn/showproblem.php?pid=4348 sb的标记永久化即可,刚开始add和sum没复制过来wa了两发...,操作和原来的都一样,出来单点变成区间 ...
- HDU4348:To the moon
浅谈主席树:https://www.cnblogs.com/AKMer/p/9956734.html 浅谈标记永久化:https://www.cnblogs.com/AKMer/p/10137227. ...
- [HDU4348]To the moon(主席树)
传送门 对于这个题,显然要打lazy标记了,但是lazy标记pushdown的时候肯定会增加一大堆节点,然后就MLE了.(题解这么说的,我其实不会pushdown) 所以,就换另一种方式,把标记直接打 ...
随机推荐
- Python3基础 函数 可变参数,将传进来的参数转成列表
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3基础 file open+write 对不存在的txt进行创建与写入
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- caffe深度学习网络(.prototxt)在线可视化工具:Netscope Editor
http://ethereon.github.io/netscope/#/editor 网址:http://ethereon.github.io/netscope/#/editor 将.prototx ...
- UVa 1629 切蛋糕(记忆化搜索)
https://vjudge.net/problem/UVA-1629 题意: 有一个n行m列的网格蛋糕上有一些樱桃.每次可以用一刀沿着网格线把蛋糕切成两块,并且只能直切不能拐弯.要求最后每一块蛋糕上 ...
- 数组类型的退化Decay
Decay即数组在某些情况下将退化为指针. 测试代码: #include <iostream> #include <typeinfo> template <typenam ...
- 设置网站URL启动
当新建一个MVC WEB程序 当你打开一个视图按F5运行 这时候并且不能政策运行会出现与个错误 无法找到资源. 这时候站点的默认设置是 把这个个默认设置更改成 红色框框的地方为修改点 你以为这样就完了 ...
- pandas时间序列分析和处理Timeseries
pandas最基本的时间序列类型就是以时间戳(TimeStamp)为index元素的Series类型. 生成日期范围: pd.date_range()可用于生成指定长度的DatetimeIndex.参 ...
- STL_iterator返回值
1. iterator的类型 有 单向的/双向的/可以随意移动的... 2. 一些 容器/算法 的返回值 是 iterator类型的,如何确定 返回的 iterator是什么类型的? 3.
- AES SBox的构造(python)
几点需要注意的,求解逆元的时候使用的是拓展欧几里得,但是那些运算规则需要变一变,模2的加减乘除(或者可以理解为多项式的运算) 在进行字节的仿射变换不用进行矩阵的运算. 一个矩阵和一个列向量进行运算的时 ...
- 《A_Pancers》第一次作业:团队亮相
一.团队及团队成员介绍 1> 队名:A_Pancers 2> 团队成员组成: 201571030310/龙正圆(小组长) 201571030329/杨环宇 20157103030 ...