[UOJ164]V
线段树真是好东西...
每个线段树节点维护四个标记:$a,b,maxa,maxb$,$(a,b)$表示对子树内的所有数执行$x'=\max(x+a,b)$,$maxa,maxb$是历史最大标记,初始时$a=ma=0,b=mb=-\infty$
首先是更新标记,假如有新标记$a',b',maxa',maxb'$要加到原有标记上,因为$x'=\max(\max(x+a,b)+a',b')=\max(x+a+a',\max(b+a',b'))$,所以我们用$a+ma'$更新$ma$,用$\max(b+ma',mb')$更新$mb$,用$\max(b+a',b')$更新$b$,用$\max(a+a',-\infty)$更新$a$
操作$1$就是$(x,0,x,0)$,操作$2$就是$(-x,0,-x,0)$,操作$3$就是$(-\infty,x,-\infty,x)$(因为这里的标记是$a=ma=-\infty$,所以刚才更新$a$要和$-\infty$取$\max$防止爆$\text{long long}$),两个询问直接$\text{pushdown}$下去即可
存历史最大标记而不是历史最大值是因为有可能一个标记还未被传下去用于更新实际数值就被另一个标记覆盖了,所以要存标记的历史最大值
#include<stdio.h> typedef long long ll; const ll inf=1000000000000000ll; ll max(ll a,ll b){return a>b?a:b;} struct seg{ ll a,b,ma,mb; seg(ll i=0,ll j=-inf,ll k=0,ll l=-inf){a=i;b=j;ma=k;mb=l;} void gao(seg t){ ma=max(ma,a+t.ma); mb=max(mb,max(b+t.ma,t.mb)); b=max(b+t.a,t.b); a=max(a+t.a,-inf); } }t[2000010]; void pushdown(int x){ t[x<<1].gao(t[x]); t[x<<1|1].gao(t[x]); t[x]=seg(); } void modify(int L,int R,seg p,int l,int r,int x){ if(L<=l&&r<=R)return t[x].gao(p); pushdown(x); int mid=(l+r)>>1; if(L<=mid)modify(L,R,p,l,mid,x<<1); if(mid<R)modify(L,R,p,mid+1,r,x<<1|1); } int query(int p,int l,int r,int x){ if(l==r)return x; pushdown(x); int mid=(l+r)>>1; if(p<=mid)return query(p,l,mid,x<<1); return query(p,mid+1,r,x<<1|1); } ll a[500010]; int main(){ int n,m,i,l,r,x; scanf("%d%d",&n,&m); for(i=1;i<=n;i++)scanf("%dll",a+i); while(m--){ scanf("%d%d",&i,&l); if(i<4)scanf("%d%d",&r,&x); if(i==1)modify(l,r,seg(x,0,x,0),1,n,1); if(i==2)modify(l,r,seg(-x,0,-x,0),1,n,1); if(i==3)modify(l,r,seg(-inf,x,-inf,x),1,n,1); if(i==4){ x=query(l,1,n,1); printf("%lld\n",max(a[l]+t[x].a,t[x].b)); } if(i==5){ x=query(l,1,n,1); printf("%lld\n",max(a[l]+t[x].ma,t[x].mb)); } } }
[UOJ164]V的更多相关文章
- uoj164. 【清华集训2015】V 统计
坑爹题面:http://uoj.ac/problem/164 正常题面: 对于一个序列支持下列5个操作: 1.区间加x 2.区间减x并与0取max 3.区间覆盖 4.单点查询 5.单点历史最大值查询 ...
- 「题解」「UOJ-164」「清华集训2015」V
目录 题目 原题目 简要题目 正解 这道题题目简洁新颖,吸引读者阅读兴趣... 题目 原题目 点这里 简要题目 需要你维护长度为n的序列并支持下列操作: 区间加法: 区间赋值: 区间每个 \(a_i\ ...
- J a v a 的“多重继承”
接口只是比抽象类“更纯”的一种形式.它的用途并不止那些.由于接口根本没有具体的实施细节——也就是说,没有与存储空间与“接口”关联在一起——所以没有任何办法可以防止多个接口合并到一起.这一点是至关重要的 ...
- Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
在学习CGlib动态代理时,遇到如下错误: Exception in thread "main" java.lang.NoSuchMethodError: org.objectwe ...
- [Erlang 0118] Erlang 杂记 V
我在知乎回答问题不多,这个问题: "对你职业生涯帮助最大的习惯是什么?它是如何帮助你的?",我还是主动回答了一下. 做笔记 一开始笔记软件做的不好的时候就发邮件给自己, ...
- v$session中server为none与shared值解析
查询V$SESSION,你会看到SERVER可能会有DEDICATED| SHARED| PSEUDO| NONE 四种值,如果SERVER字段的值除了DEDICATED,还有NONE,则说明当前实例 ...
- 引用js或css后加?v= 版本号的用法
<span style="font-size:14px;">css和js带参数(形如.css?v=与.js?v= 或 .css?version=与.js?version ...
- 操作系统中的P,V操作(转)
无论是计算机考研.计算机软件水平考试.计算机操作系统期末考试还是其他计算机岗位考试,P.V原语操作都是一个常考点.下面笔者总结了关于P.V操作的一些知识. 信号量是最早出现的用来解决进程同步与互斥问题 ...
- 关于P,V操作理解的突破,关于并发设计与并行
今天又找了一篇博客研究P,V操作.. 发现..它有一个变量没有声明.. 我就换了篇博客..http://c.biancheng.net/cpp/html/2600.html 然后就看懂了.. 关键突破 ...
随机推荐
- Covered Points Count(思维题)
C. Covered Points Count time limit per test 3 seconds memory limit per test 256 megabytes input stan ...
- bzoj 5094 [Lydsy1711月赛]硬盘检测 概率dp
[Lydsy1711月赛]硬盘检测 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 273 Solved: 75[Submit][Status][Dis ...
- docker compose,link,Odoo
1.报错: /usr/bin/docker-current: Error response from daemon: driver failed programming external connec ...
- Socket和ServerSocket学习笔记
对于即时类应用或者即时类的游戏,HTTP协议很多时候无法满足于我们的需求.这会,Socket对于我们来说就非常实用了.下面是本次学习的笔记.主要分异常类型.交互原理.Socket.ServerSock ...
- xmlns:sys="clr-namespace:System;assembly=mscorlib" NOTE: System;与assembly中间不能有空格
xmlns:sys="clr-namespace:System;assembly=mscorlib" NOTE: System;与assembly中间不能有空格 否则报错, Er ...
- 51Nod-1586-约数和
#include <cstdio> using namespace std; typedef long long ll; ; int n, q; int cnt[MAXN]; ll a[M ...
- 最大流算法 ISAP 模板 和 Dinic模板
ISAP // UVa11248 Frequency Hopping:使用ISAP算法,加优化 // Rujia Liu struct Edge { int from, to, cap, flow; ...
- Codeforces Round #301 解题报告
感觉这次的题目顺序很不合理啊... A. Combination Lock Scrooge McDuck keeps his most treasured savings in a home sa ...
- NOIP2016提高组D1T2 天天爱跑步
n<=300000个点的树,每个点有个人于第Ti秒观测,有m<=300000个人于时间0开始从Sj跑到Tj,速度1个点每秒,输出每个点上的人观察到的跑步的人的数量. 前25分:直接模拟每条 ...
- DB 基本性能指标
DB: •500K I/O limit with kill(5M I/O limit for DWS) •10,000 return row limit with kill •30 seconds p ...