51Nod1502 苹果曼和纸
题目点这里
漏写博客好多天了,赶快来补
这道题是一个裸的模拟题,注意到纸片总长度不会增加,所以用一个带翻转的splay来维护一下
每次将前半段翻转和后一段做加法合并就好了,均摊logn
#pragma GCC opitmize("O3") #pragma G++ opitmize("O3") #include<stdio.h> #include<string.h> #include<algorithm> #define N 100010 #define son(x) (s[f[x]][1]==x) using namespace std; int f[N],s[N][2],sz[N],v[N],t[N]; int n,m,cnt=0,rt=0,tp=0,stk[N],r[N]; inline int newnode(int p){++cnt; sz[cnt]=1;t[cnt]=v[cnt]=p;return cnt; } inline int ps(int x){sz[x]=sz[s[x][0]]+sz[s[x][1]]+1;t[x]=t[s[x][0]]+v[x]+t[s[x][1]]; } inline void reverse(int x){swap(s[x][0],s[x][1]);r[s[x][0]]^=1; r[s[x][1]]^=1; r[x]=0; } inline void rot(int x){int p=f[x],g=f[p],d=son(x);s[p][d]=s[x][!d]; f[s[p][d]]=p;s[x][!d]=p; f[p]=x; f[x]=g;if(g) s[g][p==s[g][1]]=x; ps(p); ps(x); } inline void splay(int x,int rt=0){for(int y=x;y;y=f[y]) stk[++tp]=y;for(;tp;--tp) if(r[stk[tp]]) reverse(stk[tp]);for(int p;(p=f[x])!=rt;rot(x))if(f[p]!=rt && son(x)==son(p)) rot(p);if(!rt) ::rt=x; } inline int select(int x,int k){for(int w;;){if(r[x]) reverse(x);w=sz[s[x][0]]+1;if(w==k) return x;if(k<w) x=s[x][0];else k-=w,x=s[x][1];} } inline int rank(int x){int r=sz[s[x][0]]+1;for(;x;x=f[x])if(son(x)) r+=sz[s[f[x]][0]]+1;return r; } inline int merge(int x,int y){if(sz[x]>sz[y]) swap(x,y);for(int i=1;sz[x];++i){splay(x=select(x,1));splay(y=select(y,i));v[y]+=v[x]; ps(y); x=s[x][1];}return y; } void print(int x){if(!x) return;print(s[x][0]);printf("[%d]",v[x]);print(s[x][1]); } int main(){scanf("%d%d",&n,&m);for(int x,i=1;i<=n;++i){x=newnode(1);if(i-1) f[i-1]=x,s[x][0]=i-1,ps(x);}rt=cnt; int t1=newnode(0),t2=newnode(0); f[t1]=t2; s[t2][0]=t1;for(int o,x,y;m--;){scanf("%d%d",&o,&x);if(o==1){splay(x=select(rt,x));y=s[x][1]; s[x][1]=0; f[y]=0; ps(x); r[x]=1;rt=merge(x,y);} else {scanf("%d",&y); s[t1][1]=rt; f[rt]=t1; ps(t1); ps(t2);splay(select(t2,++x));splay(select(rt,y+2),rt);printf("%d\n",t[s[s[rt][1]][0]]);splay(t2); splay(t1,rt); f[rt=s[t1][1]]=0; s[t1][1]=0;}//print(rt); puts(""); } }
转载于:https://www.cnblogs.com/Extended-Ash/p/9477117.html
51Nod1502 苹果曼和纸相关推荐
- 【转】苹果微软巅峰对决
http://hi.baidu.com/robin_witheme/blog/item/45233df0c2e0eece7831aa34.html 相当长的一篇文章,作者从技术方面比对分析了两个公司, ...
- “水果”公司的复兴 (乔布斯和苹果公司)
2007年 8月29 日 下午 06:03:00 发表者:Google(谷歌)研究员 吴军 看过汤姆·汉克斯主演的电影 "阿甘正传"的读者,也许还记得那么一个镜头.傻人有傻福的阿甘 ...
- 浪潮之巅第三章 — “水果”公司的复兴 (乔布斯和苹果公司)
转自:http://www.google.com.hk/ggblog/googlechinablog/2007/08/blog-post_7506.html 看过汤姆·汉克斯主演的电影 "阿 ...
- C语言z(1 3),C语言练习题z(1-3章).doc
C语言练习题z(1-3章) 氨谐择澜略珠杂翅镰藕容昭知喻僳敛远求妇肛客谈悦裙悼缚焚缆够鬼窒锐撮亦沾毛赠迎蔗茸幂厦廓敖卸渗睬润荫诞涅鉴血婪毯劣诉娇谈立握忆圃毙饥户仆吃金木髓怯蝎蛊辰囤阔菌藏炯滨葬桌壮顷罪 ...
- “水果”公司的复兴:Apple
传奇小子 看过汤姆·汉克斯主演的电影"阿甘正传"的读者,也许还记得那么一个镜头.傻人有傻福的阿甘最后捧着一张印有苹果公司标志的纸说,我买了一个水果公司的股票,有人说我这一辈不用再为 ...
- 苹果电脑打印A4纸上纸盒的细线很浅
苹果电脑打印A4纸上纸盒的细线很浅 把ai文件转成PDF,再在打印设置里设置成"以图片形式"打印(无缩放),效果好些.
- 一纸禁令何以让苹果闪跌5400亿?
出品|虎嗅商业.消费与机动组作者|黄青春 一纸禁令使苹果在一个交易日蒸发掉约5432亿元(总市值蒸发约843亿美元). 上周五(9月10日),美国加州地方法院法官就Epic Games对苹果的反垄断诉 ...
- 把自己这一年里的目标写在一张纸上---莱昂纳多·瑞兹曼
我建议你把这一年里的目标写在一张纸上,再把生活或长程的目标写在另外一张纸上:你的目标要不只一项,但生活各方面主要的目标最多只能有一项,也就是说,不要有互相冲突的目标. 你也可以把目标写在卡片上随身携带 ...
- 苹果套纸袋子跟塑料袋子的区别
套袋是在苹果很小的时候套在苹果上保护苹果的,有不透明的纸袋和透明的塑料袋之分. 纸袋的特点: 不透明的纸袋,会让苹果一直在黑暗中生长,果型比较正,外观比较好看,到苹果该上色的时候摘掉纸套,苹果上色好, ...
最新文章
- Windows 平台下解决httpd.exe: syntax error on line 39
- 一天教会三岁表弟HTML,你值得拥有
- Thread.currentThread().getContextClassLoader().getResourceAsStream()读取配置文件
- 【Todo】Java8新特性学习
- sorl6.0+jetty+mysql搭建solr服务
- 腾讯优图刷新人体姿态估计国际权威榜单,相关论文被ECCV2020收录
- DataBaseMetaData 从数据库中读取关于数据库属性
- 《linux系统及其编程》实验课记录(六)
- python获取路径下所有文件_Python 之 glob读取路径下所有文件夹或文件方法
- 扎克伯格为女儿选的量子物理学童书 你看得懂不?
- Python实现康威生命游戏
- MPEG4写为avi文件
- 前端面试题—2021年web前端开发面试题
- PowerBi包含什么,以及每一个的介绍
- 松下服务器分频器输出信号与,详解几款常用分频器及音箱分频器电路图
- python价值算法_第十课-Python金融学基础——夏普比率(Sharpe-ratio)和资产组合价值(portfolio-value)...
- 99的测试人还不会用nose进行自动化测试
- ModuleNotFoundError: No module named ‘official‘
- 网红电商第一股”赴美上市,它还需要复制多少个张大奕?
- IL2CPP是什么?