【BZOJ3064】【Tyvj1518】CPU监控 裸线段树
来源:互联网 发布:淘宝投资要多少钱 编辑:程序博客网 时间:2024/06/13 23:55
#include <stdio.h>int main(){puts("转载请注明出处谢谢");puts("http://blog.csdn.net/vmurder/article/details/43271091");}
题解:显然是裸的线段树,连区间合并都没有,更别提可持久化了。。。
水得一比,但是也相当恶心。。
维护一下:
目前线段 最大值、覆盖值、增加值、
历史线段 最大值、覆盖值、增加值。
然后覆盖值是赋-inf还是再加个flag记录有没有随便了。
总之很恶心,昨天晚上调了好久好久都没调过。
对了,这种恶心的东西不妨分多个线段树维护。
o(︶︿︶)o 、本来就感冒,晚上还熬夜,作死0:30去操场跑个步还撞到了铁门上。
Qwq。
贴代码吧,虽然没什么意义。
呃,我的define不是很难看的,不用抗拒的说~~wWW
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define inf 0x3f3f3f3f#define ls note<<1#define rs note<<1|1#define N 101000#define his hs[note]#define my s[note]using namespace std;struct Segment_Tree{int x,cover,add;}s[N<<2],hs[N<<2];inline void checkmax(int &x,int y){x=max(x,y);}inline void h_add(int note,int v){checkmax(his.x,my.x+v);if(my.cover>-inf)checkmax(his.cover,my.cover+v);else checkmax(his.add,my.add+v);}inline void h_cover(int note,int v){checkmax(his.x,v);checkmax(his.cover,v);}inline void m_add(int note,int v){checkmax(his.x,my.x+=v);if(my.cover>-inf)checkmax(his.cover,my.cover+=v);else checkmax(his.add,my.add+=v);}inline void m_cover(int note,int v){checkmax(his.x,my.x=v);checkmax(his.cover,my.cover=v);my.add=0;}inline void pushdown(int note){if(his.add){h_add(ls,his.add);h_add(rs,his.add);his.add=0;}if(his.cover>-inf){h_cover(ls,his.cover);h_cover(rs,his.cover);his.cover=-inf;}if(my.add){m_add(ls,my.add);m_add(rs,my.add);my.add=0;}if(my.cover>-inf){m_cover(ls,my.cover);m_cover(rs,my.cover);my.cover=-inf;}}inline void pushup(int note){my.x=max(s[ls].x,s[rs].x);checkmax(his.x,max(hs[ls].x,hs[rs].x));}void build(int note,int l,int r){my.cover=his.cover=-inf;if(l==r){scanf("%d",&my.x),his.x=my.x;return ;}int mid=l+r>>1;build(ls,l,mid),build(rs,mid+1,r);his.x=-inf,pushup(note);}void add(int note,int L,int R,int l,int r,int x){if(l<=L&&R<=r){m_add(note,x);return ;}pushdown(note);int mid=L+R>>1;if(l<=mid)add(ls,L,mid,l,r,x);if(r>mid)add(rs,mid+1,R,l,r,x);pushup(note);}void cover(int note,int L,int R,int l,int r,int x){if(l<=L&&R<=r){m_cover(note,x);return ;}pushdown(note);int mid=L+R>>1;if(l<=mid)cover(ls,L,mid,l,r,x);if(r>mid)cover(rs,mid+1,R,l,r,x);pushup(note);}int query(int note,int L,int R,int l,int r){if(l<=L&&R<=r)return my.x;pushdown(note);int mid=L+R>>1,ans=-inf;if(l<=mid)ans=max(ans,query(ls,L,mid,l,r));if(r>mid)ans=max(ans,query(rs,mid+1,R,l,r));return ans;}int ask(int note,int L,int R,int l,int r){if(l<=L&&R<=r)return his.x;pushdown(note);int mid=L+R>>1,ans=-inf;if(l<=mid)ans=max(ans,ask(ls,L,mid,l,r));if(r>mid)ans=max(ans,ask(rs,mid+1,R,l,r));return ans;}int n,m;int main(){char opt[5];int i,j,k;int a,b,c;scanf("%d",&n);build(1,1,n);for(scanf("%d",&m);m--;){scanf("%s%d%d",opt,&a,&b);if(opt[0]=='Q')printf("%d\n",query(1,1,n,a,b));else if(opt[0]=='A')printf("%d\n",ask(1,1,n,a,b));else if(opt[0]=='P'){scanf("%d",&c);add(1,1,n,a,b,c);}else if(opt[0]=='C'){scanf("%d",&c);cover(1,1,n,a,b,c);}}return 0;}
2 0
- 【BZOJ3064】【Tyvj1518】CPU监控 裸线段树
- [BZOJ3064][Tyvj1518]CPU监控
- 【bzoj3064】【Tyvj 1518 CPU监控】
- BZOJ3064: Tyvj 1518 CPU监控
- [bzoj3064]Tyvj 1518 CPU监控 线段树&排行榜垫底留念
- HDU4578 Transformation(裸线段树)
- [UOJ 25][IOI2014]Wall(裸线段树)
- 【解题报告】BZOJ1858 裸线段树
- hdu1754(裸线段树) 改点问区间最大值
- CDOJ 1057 秋实大哥与花 裸线段树
- 【裸线段树】Uestc-数据结构专题训练【A】
- POJ-3264-Balanced Lineup(裸线段树)
- HDU-1166 敌兵布阵 (裸线段树算法)
- HDU-1754 I hate it (裸线段树)
- HDU 4614 (13年多校第二场1004)裸线段树
- [poj 3468] A Simple Problem with Integers(裸线段树)
- FZU Problem 2171 防守阵地 II (裸线段树 懒惰标记)
- 2015长春网络赛 1007 - The Water Problem(裸线段树)
- 网络基本功(十七):细说tcpdump的妙用(上)
- CAAnimation动画/CAAnimation Group
- cocoapods的安装与使用心得整理
- 《正确去掉Win7快捷方式小箭头》
- C语言的整型溢出问题
- 【BZOJ3064】【Tyvj1518】CPU监控 裸线段树
- 拼接linq查询表达式
- VLC架构及流程分析
- 拼接linq查询表达式
- ViewPager相互嵌套,里层ViewPager无法滑动
- swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程
- 各知识点2
- Servlet
- EL表达式中fn函数