【UOJ#164】清华集训2015V
QwQzcysky真是菜死了,这是我刚上高一的时候坤爷在夏令营讲的,可是今天才切掉……
想想也神奇,一个2016.11才学会线段树的菜鸡,夏令营的时候居然听过Segment-Tree-Beats?
所以我们来看下这个神奇的Segment-Tree-Beats.
我们维护一个神奇的标记二元组(x,y),在树点上打这个标记表示$val[o]=max(val[o]+x,y)$
然后我们看一下它是不是可以合并(否则这就是一个没有的东西)
merge:merge(Tag[x],Tag[y])=(x1+x2,max(y1+x2,y2))
那么我们怎么把操作对应到标记修改上呢?
- opt1:(x,0)
- opt2:(-x,0)
- opt3:(-inf,x)
query的时候查询标记,正常pushdown就行了。
所以再维护一下历史最大值,这个对于做过一些简单的Segment-Tree-Beats的同学来说简直是简单的不行。
不过每次修改的时候有一个小细节,(x,y)的x最好是max(x,-inf),否则会出事。
#include<bits/stdc++.h>
#define N 500010
#define lson (o<<1)
#define rson (o<<1|1)
using namespace std;
typedef long long ll;
const ll inf=1e18;
int n,m;
struct Tag{
ll x,y,tx,ty;
Tag(ll x=,ll y=,ll tx=,ll ty=):x(x),y(y),tx(tx),ty(ty){}
};
ll a[N];
struct Segment_Tree_Beats{
ll val[N<<];Tag tag[N<<];
inline Tag merge(Tag a,Tag b){
return Tag(max(a.x+b.x,-inf),max(a.y+b.x,b.y),max(a.tx,a.x+b.tx),max(a.ty,max(a.y+b.tx,b.ty)));
}
inline void pushdown(int o,int l,int r){
if(l==r)return;
tag[lson]=merge(tag[lson],tag[o]);
tag[rson]=merge(tag[rson],tag[o]);
tag[o]=Tag(,,,);
}
void build(int o,int l,int r){
tag[o]=Tag(,,,);
if(l==r)return;int mid=(l+r)>>;
build(lson,l,mid);build(rson,mid+,r);
}
void change(int o,int l,int r,int ql,int qr,Tag v){
if(ql<=l&&r<=qr){tag[o]=merge(tag[o],v);return;}
int mid=(l+r)>>;pushdown(o,l,r);
if(ql<=mid)change(lson,l,mid,ql,qr,v);
if(qr>mid)change(rson,mid+,r,ql,qr,v);
}
Tag query(int o,int l,int r,int q){
if(l==r)return tag[o];
int mid=(l+r)>>;pushdown(o,l,r);
if(q<=mid)return query(lson,l,mid,q);
else return query(rson,mid+,r,q);
}
}T;
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int main(){
n=read();m=read();
for(int i=;i<=n;i++)a[i]=read();
T.build(,,n);
while(m--){
Tag ans;int opt=read();
if(opt==){
int l=read(),r=read(),x=read();
T.change(,,n,l,r,Tag(x,-inf,x,-inf));
}
if(opt==){
int l=read(),r=read(),x=read();
T.change(,,n,l,r,Tag(-x,,-x,));
}
if(opt==){
int l=read(),r=read(),x=read();
T.change(,,n,l,r,Tag(-inf,x,-inf,x));
}
if(opt==){
int x=read();ans=T.query(,,n,x);
printf("%lld\n",max(a[x]+ans.x,ans.y));
}
if(opt==){
int x=read();ans=T.query(,,n,x);
printf("%lld\n",max(a[x]+ans.tx,ans.ty));
}
}
}
【UOJ#164】清华集训2015V的更多相关文章
- UOJ #164 [清华集训2015]V (线段树)
题目链接 http://uoj.ac/problem/164 题解 神仙线段树题. 首先赋值操作可以等价于减掉正无穷再加上\(x\). 假设某个位置从前到后的操作序列是: \(x_1,x_2,..., ...
- [UOJ#274][清华集训2016]温暖会指引我们前行
[UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一 ...
- BZOJ 4732 UOJ #268 [清华集训2016]数据交互 (树链剖分、线段树)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4732 (UOJ) http://uoj.ac/problem/268 题解 ...
- uoj #46[清华集训2014]玄学
uoj 因为询问是关于一段连续区间内的操作的,所以对操作构建线段树,这里每个点维护若干个不交的区间,每个区间\((l,r,a,b)\)表示区间\([l,r]\)内的数要变成\(ax+b\) 每次把新操 ...
- [UOJ#276][清华集训2016]汽水[分数规划+点分治]
题意 给定一棵 \(n\) 个点的树,给定 \(k\) ,求 \(|\frac{\sum w(路径长度)}{t(路径边数)}-k|\)的最小值. \(n\leq 5\times 10^5,k\leq ...
- UOJ.41.[清华集训2014]矩阵变换(稳定婚姻)
题目链接 稳定婚姻问题:有n个男生n个女生,每个男/女生对每个女/男生有一个不同的喜爱程度.给每个人选择配偶. 若不存在 x,y未匹配,且x喜欢y胜过喜欢x当前的配偶,y喜欢x也胜过y当前的配偶 的完 ...
- bzoj 3816&&uoj #41. [清华集训2014]矩阵变换
稳定婚姻问题: 有n个男生,n个女生,所有女生在每个男生眼里有个排名,反之一样. 将男生和女生两两配对,保证不会出现婚姻不稳定的问题. 即A-1,B-2 而A更喜欢2,2更喜欢A. 算法流程: 每次男 ...
- UOJ #164. 【清华集训2015】V | 线段树
题目链接 UOJ #164 题解 首先,这道题有三种询问:区间加.区间减(减完对\(0\)取\(\max\)).区间修改. 可以用一种标记来表示--标记\((a, b)\)表示把原来的值加上\(a\) ...
- UOJ 275. 【清华集训2016】组合数问题
UOJ 275. [清华集训2016]组合数问题 组合数 $C_n^m $表示的是从 \(n\) 个物品中选出 \(m\) 个物品的方案数.举个例子,从$ (1,2,3)(1,2,3)$ 三个物品中选 ...
随机推荐
- 【bzoj1688】[USACO2005 Open]Disease Manangement 疾病管理 状态压缩dp+背包dp
题目描述 Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the farm. Far ...
- python字典的常用操作
# dic={[1,2,3]:'123'} #可变类型不能当做字典的key,value可以使用任意类型 # dic={(2,3,4):'123'} # print (dic[(2,3,4)]) #元组 ...
- BZOJ2730:[HNOI2012]矿场搭建——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=2730 https://www.luogu.org/problemnew/show/P3225 听说 ...
- BZOJ4872:[SHOI2017]分手是祝愿——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=4872 https://www.luogu.org/problemnew/show/P3750 Zei ...
- BZOJ1014:[JSOI2008]火星人prefix——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1014 Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样 ...
- 洛谷 P1363 幻想迷宫 解题报告
P1363 幻想迷宫 题目描述 背景 Background (喵星人LHX和WD同心协力击退了汪星人的入侵,不幸的是,汪星人撤退之前给它们制造了一片幻象迷宫.) WD:呜呜,肿么办啊-- LHX:mo ...
- maven的setting.xml文件中只配置本地仓库路径的方法
maven的setting.xml文件中只配置本地仓库路径的方法 即:settings标签下只有一个 localRepository标签,其他全部注释掉即可 <?xml version=&quo ...
- linux配置虚拟机网络环境(老师要求的host-only)
我这个人就是懒,这TMD是全天下最坑爹的缺点了,当然爆粗口也是缺点,让我发泄一下吧.T^T 从n久之前,开了hadoop课的一天,我就想着要配置好,结果两次课连眼镜都忘了带,可想而知是什么陪我度过了那 ...
- 理解LINUX LOAD AVERAGE的误区
一直不解,为什么io占用较高时,系统负载也会变高,偶遇此文,终解吾惑. uptime和top等命令都可以看到load average指标,从左至右三个数字分别表示1分钟.5分钟.15分钟的load a ...
- bzoj 3289 Mato的文件管理 树状数组+莫队
Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 4325 Solved: 1757[Submit][Status][Discuss ...