bzoj3223 splay
区间反转 先发代码 待会再谈感悟
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #define rep(i,l,r) for(int i=l;i<r;i++) 7 #define clr(a,x) memset(a,x,sizeof(a)) 8 using namespace std; 9 const int maxn=100005,maxm=100005; 10 int n,m; 11 struct node*null,*pt; 12 struct node{ 13 node*ch[2]; 14 int v,s; 15 bool rev; 16 node(int v1=0):v(v1),s(1),rev(0){ 17 ch[0]=ch[1]=null; 18 } 19 inline int cmp(int k)const{ 20 k-=ch[0]->s; 21 if(k==1) return -1; 22 return k<=0?0:1; 23 } 24 inline void update(){ 25 s=ch[0]->s+ch[1]->s+1; 26 } 27 inline void pushdown(){ 28 if(rev){ 29 rev=0; 30 swap(ch[0],ch[1]); 31 ch[0]->rev^=1; 32 ch[1]->rev^=1; 33 } 34 } 35 void*operator new(size_t){ 36 return pt++; 37 } 38 }; 39 node*root; 40 node x[maxn]; 41 void rotate(node*&o,int d) 42 { 43 node* k=o->ch[d^1]; 44 o->ch[d^1]=k->ch[d]; 45 k->ch[d]=o; 46 o->update(); 47 k->update(); 48 o=k; 49 } 50 void splay(node*&o,int k) 51 { 52 o->pushdown(); 53 int d=o->cmp(k); 54 if(d==-1) return; 55 if(d==1) k-=o->ch[0]->s+1; 56 node*p=o->ch[d]; 57 p->pushdown(); 58 int d2=p->cmp(k); 59 int k2=d2?k-p->ch[0]->s-1:k; 60 if(d2!=-1){ 61 splay(p->ch[d2],k2); 62 d==d2?rotate(o,d^1):rotate(o->ch[d],d); 63 } 64 rotate(o,d^1); 65 } 66 node*build(int l,int r) 67 { 68 if(l>=r) return null; 69 int mid=(l+r)>>1; 70 node*o=new node(mid); 71 if(l<mid) o->ch[0]=build(l,mid); 72 if(r>mid+1) o->ch[1]=build(mid+1,r); 73 o->update(); 74 return o; 75 } 76 void init() 77 { 78 pt=x; 79 null=new node(); 80 null->s=0; 81 root=build(0,n+2); 82 } 83 void dfs(node*o) 84 { 85 if(o==null) return; 86 o->pushdown(); 87 dfs(o->ch[0]); 88 if(o->v>=1&&o->v<=n) printf("%d ",o->v); 89 dfs(o->ch[1]); 90 } 91 int read() 92 { 93 int ans=0,f=1; 94 char c; 95 c=getchar(); 96 while(!isdigit(c)){ 97 if(c=='-') f=-1; 98 c=getchar(); 99 } 100 while(isdigit(c)){ 101 ans=ans*10+c-'0'; 102 c=getchar(); 103 } 104 return f*ans; 105 } 106 int main() 107 { 108 n=read(); 109 m=read(); 110 init(); 111 while(m--){ 112 int l=read(),r=read(); 113 if(l==r) continue; 114 splay(root,l); 115 splay(root->ch[1],r+1-root->ch[0]->s); 116 root->ch[1]->ch[0]->rev^=1; 117 } 118 dfs(root); 119 return 0; 120 }
View Code
3223: Tyvj 1729 文艺平衡树
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 1848 Solved: 1026
[Submit][Status][Discuss]
Description
您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1
Input
第一行为n,m n表示初始序列有n个数,这个序列依次是(1,2……n-1,n) m表示翻转操作次数
接下来m行每行两个数[l,r] 数据保证 1<=l<=r<=n
Output
输出一行n个数字,表示原始序列经过m次变换后的结果
Sample Input
1 3
1 3
1 4
Sample Output
HINT
N,M<=100000
Source
平衡树
[Submit][Status][Discuss]
转载于:https://www.cnblogs.com/chensiang/p/4618456.html
bzoj3223 splay相关推荐
- 【Splay】【块状链表】bzoj3223 Tyvj 1729 文艺平衡树
让蒟蒻见识到了常数大+滥用STL的危害. <法一>很久之前的Splay #include<cstdio> #include<algorithm> using nam ...
- 【BZOJ3223】文艺平衡树,Splay反转区间
传送门 写在前面:感觉身体被掏空 思路:不明 注意:打标记 #include<cstdio> #include<cstring> #include<iostream> ...
- 二逼平衡树——树套树(线段树套Splay平衡树)
题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...
- 简析平衡树(三)——浅谈Splay
前言 原本以为\(Treap\)已经很难了,学习了\(Splay\),我才知道,没有最难,只有更难.(强烈建议先去学一学\(Treap\)再来看这篇博客) 简介 \(Splay\)是平衡树中的一种,除 ...
- AVL树、splay树(伸展树)和红黑树比较
AVL树.splay树(伸展树)和红黑树比较 一.AVL树: 优点:查找.插入和删除,最坏复杂度均为O(logN).实现操作简单 如过是随机插入或者删除,其理论上可以得到O(logN)的复杂度,但是实 ...
- bzoj1251: 序列终结者 (splay)
splay可以用于维护序列,比如noi的维修序列,比如这道 发现当时splay没写总结,也没题解 然后重新写splay竟然耗了一个晚上 结果是因为max[0]没有附最小值!!血一样的教训 最后祭出in ...
- BZOJ 1503 郁闷的出纳员(splay)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 题意:给出一个数列(初始为空),给出一个最小值Min,当数列中的数字小于Min时自动 ...
- [BZOJ1503]郁闷的出纳员(Splay)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- Splay ---- 2018牛客多校第三场 区间翻转搞区间位移 或者 rope可持久化块状链表
题目链接 题目大意: 就是每次把牌堆中若干个连续的牌放到堆顶,问你最后牌的序列. 解题思路: Splay 区间翻转的模板题: 对于一个区间[1,2,3,4,5,6,7,8][1,2,3,4,5,6,7 ...
最新文章
- nginx源码编译、负载均衡及模块的扩展
- 如何一小时杀入天池OCR比赛前排?
- is 和 == 以及 编码和解码
- 从业务需求抽象成模型解决方案
- shell 执行脚本
- 一道计算时间的机试题
- inflect java_关于Platinum库的MediaRender具体C++代码实现探讨
- Android学习笔记之Broadcast Receiver
- 没事学学docker(三):配置阿里云镜像加速以及解决docker起不来的问题
- 最新 eclipse 安装SVN插件
- [转贴]记那对住在我隔壁储藏室的大学刚毕业的小夫妻
- jmeter常用操作说明
- vue图片裁剪插件vue-cropper
- WinCC 中批量绑定变量
- 阿里巴巴社招Java面试题做题记录
- JSON数据交互和RESTful支持
- 产品沉思录精选:为何知识资本将胜过金融资本
- mysql在windows安装和卸载步骤,以及相关问题的解决记录
- 阅读 git 最初版源码总结
- 分享一款多功能免费SEO工具箱-从0开始打造高流量网站
热门文章
- Memcached Java客户端2.6.1发布
- Leetcode 532.数组中的K-diff数对
- js条件语句,用if...else if....else方程ax2+bx+c=0一元二次方程。求根
- LCA 在线倍增法 求最近公共祖先
- java学习笔记-set
- Ouath 验证过程
- Deep Learning回顾之LeNet、AlexNet、GoogLeNet、VGG、ResNet
- OpenStack技术峰会PPT集萃
- 结合MongoDB开发LBS应用
- 深度解析】Google第二代深度学习引擎TensorFlow开源(CMU邢波独家点评、白皮书全文、视频翻译)