【splay模板】
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <queue> #define oo 1000000000 #define lc(x) son[x][0] #define rc(x) son[x][1] using namespace std; int i,j,k,n,m,s,t,ans; ]; struct node { int set,rever; } tag[]; ][]; ]; ]; ]; ]; ]; ]; ]; ]; queue <int> q; int root,cnt,pos; void update(int x) { size[x] = size[lc(x)]+size[rc(x)]+; tsum[x] = tsum[lc(x)]+tsum[rc(x)]+key[x]; lmax[x] = max(lmax[lc(x)],tsum[lc(x)]+key[x]+lmax[rc(x)]); rmax[x] = max(rmax[rc(x)],tsum[rc(x)]+key[x]+rmax[lc(x)]); tmax[x] = max(max(tmax[lc(x)],tmax[rc(x)]),lmax[rc(x)]+key[x]+rmax[lc(x)]); } void Round(int x) { swap(lc(x),rc(x)); swap(lmax[x],rmax[x]); } void build(int l,int r,int &x) { if (l>r) { x = ; return; } if (l==r) { if (!q.empty()) { x = q.front(); q.pop(); } else x = ++cnt; tag[x].rever = ; tag[x].; key[x] = tsum[x] = tmax[x] = a[l]; lmax[x] = rmax[x] = max(,a[l]); size[x] = ; lc(x) = rc(x) = ; return; } ; if (!q.empty()) { x = q.front(); q.pop(); } else x = ++cnt; key[x] = a[mid]; tag[x].rever = ; tag[x].; lc(x) = rc(x) = ; build(l,mid-,lc(x)); build(mid+,r,rc(x)); ) fa[lc(x)] = x; ) fa[rc(x)] = x; update(x); } void pushdown(int x) { ) { tag[x].rever = ; tag[lc(x)].rever ^= ; tag[rc(x)].rever ^= ; Round(lc(x)); Round(rc(x)); } ) { ) { tag[lc(x)].set = tag[x].set; key[lc(x)] = tag[x].set; tsum[lc(x)] = tag[x].set*size[lc(x)]; ) tmax[lc(x)] = lmax[lc(x)] = rmax[lc(x)] = tsum[lc(x)]; else { tmax[lc(x)] = tag[x].set; lmax[lc(x)] = rmax[lc(x)] = ; } } ) { tag[rc(x)].set = tag[x].set; key[rc(x)] = tag[x].set; tsum[rc(x)] = tag[x].set*size[rc(x)]; ) tmax[rc(x)] = lmax[rc(x)] = rmax[rc(x)] = tsum[rc(x)]; else { tmax[rc(x)] = tag[x].set; lmax[rc(x)] = rmax[rc(x)] = ; } } tag[x].; } } int find(int x,int k) { pushdown(x); ==k) return x; else if (size[lc(x)]>=k) return find(lc(x),k); ); } void rotate(int x) { int y = fa[x],z = fa[y],w = lc(y)==x; pushdown(y); pushdown(x); fa[son[x][w]] = y;son[y][w^] = son[x][w]; fa[x] = z;) son[z][rc(z)==y] = x; son[x][w] = y;fa[y] = x; update(y); update(x); } void splay(int x,int s) { pushdown(x); while (fa[x]!=s) { int y = fa[x],z = fa[y]; if (z!=s) rotate(lc(z)==y^lc(y)==x?x:y); rotate(x); } update(x); ) root = x; } void insert(int pos) { int z; build(,n,z); int x = find(root,pos); ); splay(x,); splay(y,root); lc(y) = z; fa[z] = y; update(y); update(x); } void del(int x) { ) return; del(lc(x)); q.push(x); del(rc(x)); } void erase(int pos,int n) { ); int y = find(root,pos+n); splay(x,); splay(y,root); del(lc(y)); lc(y) = ; update(y); update(x); } int main() { scanf("%d%d",&n,&m); a[] = a[n+] = -oo; tmax[] = -oo; ;i<=n+;i++) scanf("%d",&a[i]); build(,n+,root); while (m--) { ]; scanf(); ]=='I') { scanf("%d%d",&pos,&n); ;i<=n;i++) scanf("%d",&a[i]); insert(pos+); } ]=='D') { scanf("%d%d",&pos,&n); erase(pos+,n); } ]==]=='K') { int c; scanf("%d%d%d",&pos,&n,&c); int x = find(root,pos); ); splay(x,); splay(y,root); tag[lc(y)].set = c; key[lc(y)] = c; tsum[lc(y)] = c*size[lc(y)]; ) tmax[lc(y)] = lmax[lc(y)] = rmax[lc(y)] = tsum[lc(y)]; else { tmax[lc(y)] = c; lmax[lc(y)] = rmax[lc(y)] = ; } update(y); update(x); } ]=='R') { scanf("%d%d",&pos,&n); int x = find(root,pos); ); splay(x,); splay(y,root); tag[lc(y)].rever ^= ; Round(lc(y)); update(y); update(x); } ]=='G') { scanf("%d%d",&pos,&n); int x = find(root,pos); ); splay(x,); splay(y,root); printf("%d\n",tsum[lc(y)]); } else printf("%d\n",tmax[root]); } ; }
BZOJ1500 维修数列
【splay模板】的更多相关文章
- bzoj 1588 splay模板题
用晚自习学了一下splay模板,没想象中那么难,主要是左旋和右旋可以简化到一个函数里边,减少代码长度... #include<iostream> #include<cstdio> ...
- COJ 1002 WZJ的数据结构(二)(splay模板)
我的LCC,LCT,Splay格式终于统一起来了... 另外..这个形式的Splay是标准的Splay(怎么鉴别呢?看Splay函数是否只传了一个变量node就行),刘汝佳小白书的Splay写的真是不 ...
- Splay 模板
Splay 模板 struct SplayTree{ const static int maxn = 1e5 + 15; int ch[maxn][2] , key[maxn] , s[maxn] , ...
- [luogu3369/bzoj3224]普通平衡树(splay模板、平衡树初探)
解题关键:splay模板题整理. 如何不加入极大极小值?(待思考) #include<cstdio> #include<cstring> #include<algorit ...
- BZOJ1588 [HNOI2002]营业额统计 splay模板
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 16189 Solved: 6482 [Submit][S ...
- 文艺平衡树(splay模板)
题干:splay模板,要求维护区间反转. splay是一种码量小于treap,但支持排名,前驱后继等treap可求的东西,也支持区间反转的平衡树. 但是有两个坏处: 1.splay常数远远大于trea ...
- [洛谷P3391] 文艺平衡树 (Splay模板)
初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...
- bzoj 1208 splay模板题2
自己yy了找前驱和后继,学了学怎么删除...(反正就是练模板) #include<iostream> #include<cstdio> #include<cstring& ...
- 【BZOJ 3196】二逼平衡树 线段树套splay 模板题
我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排 ...
- 【BZOJ 3188】【Coci 2011】Upit Splay模板题
转啊转终于转出来了,然而我的模板跟陈竞潇学长的模板一模一样,还是太弱啊,第一次用指针. #include<cstdio> #include<cstring> #include& ...
随机推荐
- jQuery MiniUI开发系列之:使用API文档
jQuery MiniUI在组件设计上,是简约.独立的,没有复杂的继承体系. 比如使用DataGrid,可以在api文档的datagrid部分,查找到datagrid的所有属性.方法.事件,而无需关注 ...
- 关于android.view.WindowManager$BadTokenException问题出现以及解决的一些记录
1.出现 在app showdialog()时偶尔会出现,根据stackoverflow.com的描述,貌似是show的时候用作context的activity以及destroy了,,,一些异步操作会 ...
- 转载:最近有两款路由器D-link , Tenda分别被爆出固件中存在后门
最近有两款路由器分别被爆出固件中存在后门. D-link D-link是台湾公司,成立于1986年,『公司致力于高级网络.宽带.数字.语音和数据通信解决方案的设计.制造和营销,是业界的全球领导者』(官 ...
- Java温故系列之web项目复习
如果从外面导入项目 操作方法为: File->Import -->General-->Existing Project into Workspace 搭建sqlserver数据库连接 ...
- docker理念:不可变基础设施
不可变基础设施 1.什么是Immutable Infrastructure Immutable Infrastructure,直译过来就是不可变基础设施. 它是由Chad Fowler于2013年提出 ...
- 【Python】supervisor安装和管理celery
参考:http://blog.csdn.net/wawa8899/article/details/52743861 参考:http://www.cnblogs.com/mountaingeek/p/5 ...
- According to TLD or attribute directive in tag file, attribute test does not accept any expressions
HTTP Status 500 - /WEB-INF/views/emp/list.jsp (line: 30, column: 4) According to TLD or attribute di ...
- Webservice简介
一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...
- subline text3 删除行 快捷键设置
打开 首选项-->按键绑定 { "keys": ["ctrl+shift+k"], "command": "run_macr ...
- char wchar 互转 多字符 宽字符 的N种方式
1: 用 CString 如果没有mfc 可以用 ATL 中的 CString #include <atlstr.h> CStringA v1 = "111&quo ...