sgu187&&spoj7734
题解:
splay翻转(只有翻转
sgu ac,spoj tle
代码:
- #pragma GCC optimize(2)
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int N=;
- int n,m,sz,rt,pre[N],cas,l,r,c[N][],alen,data[N],size[N],rev[N];
- void pushup(int k)
- {
- size[k]=size[c[k][]]+size[c[k][]]+;
- }
- void pushdown(int k)
- {
- int l=c[k][],r=c[k][];
- if(rev[k])
- {
- swap(c[k][],c[k][]);
- rev[l]^=;rev[r]^=;
- rev[k]=;
- }
- }
- void rotate(int x,int &k)
- {
- int y=pre[x],z=pre[y],l,r;
- if(c[y][]==x)l=;
- else l=;
- r=l^;
- if(y==k)k=x;
- else {if(c[z][]==y)c[z][]=x;else c[z][]=x;}
- pre[x]=z;pre[y]=x;pre[c[x][r]]=y;
- c[y][l]=c[x][r];c[x][r]=y;
- pushup(y);pushup(x);
- }
- void splay(int x,int &k)
- {
- while(x!=k)
- {
- int y=pre[x],z=pre[y];
- if(y!=k)
- {
- if(c[y][]==x^c[z][]==y)rotate(x,k);
- else rotate(y,k);
- }
- rotate(x,k);
- }
- }
- int find(int k,int rank)
- {
- pushdown(k);
- int l=c[k][],r=c[k][];
- if (size[l]+==rank)return k;
- else if (size[l]>=rank)return find(l,rank);
- else return find(r,rank-size[l]-);
- }
- void change(int l,int r)
- {
- int x=find(rt,l),y=find(rt,r+);
- splay(x,rt);splay(y,c[x][]);
- int z=c[y][];
- rev[z]^=;
- }
- void build(int l,int r,int f)
- {
- if(l>r)return;
- int now=data[l],last=data[f];
- if(l==r)
- {
- pre[now]=last;size[now]=;
- if(l<f)c[last][]=now;
- else c[last][]=now;
- return;
- }
- int mid=(l+r)>>;now=data[mid];
- build(l,mid-,mid);
- build(mid+,r,mid);
- pre[now]=last;pushup(mid);
- if(mid<f)c[last][]=now;
- else c[last][]=now;
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- for(int i=;i<=n+;i++)data[i]=++sz;
- build(,n+,);rt=(n+)>>;
- while (m--)
- {
- scanf("%d%d",&l,&r);
- if (l!=r)change(l,r);
- }
- for(int i=;i<=n+;i++)printf("%d\n",find(rt,i)-);
- }
sgu187&&spoj7734的更多相关文章
- POJ 2112 - Optimal Milking
原题地址:http://poj.org/problem?id=2112 题目大意:有K个挤奶机(标号为1 ~ K)和C头奶牛(编号为K + 1 ~ K + C),以邻接矩阵的方式给出它们两两之间的距离 ...
- SGU Volume 1
SGU 解题报告(持续更新中...Ctrl+A可看题目类型): SGU101.Domino(多米诺骨牌)------------★★★type:图 SGU102.Coprimes(互质的数) SGU1 ...
随机推荐
- CreateDirectory 创建文件夹 C\C++
函数原型: CreateDirectory( LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes ); 简介: CreateD ...
- 在terminal下的快捷键
1.回到行首的快捷键:ctrl + esc 2.ctrl+[可以替代esc
- 以太坊(Ethereum) - 节点时间未同步和区块同步失败案例分析
背景 以太坊技术搭建的区块链网络,节点间需要保证时间一致,才能正常有序的发送交易和生成区块,使得众多节点共同维护分布式账本(区块数据+状态数据).但是,网络中节点的系统时间不一致回出现什么现象呢,我们 ...
- [BZOJ1497]最大获利
Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一 ...
- c# 、 Asp.net 获取本地IP和MAC地址
using System; using System.Management; using System.Net; public class Program { static void Main(str ...
- Java jdbc访问sqlserver,oracle数据库 DEMO
1.JDBC访问Oracle数据库 public class Jdbc_Oracle { // 静态代码块,只会执行一次,类似C#静态构造方法 static { try { // 加载数据库驱动一次 ...
- [原][译][osg][osgEarth]飞行模拟软件JSBSim的操作(FGFCS类)
英文原文在 FGFCS.h头文件中 JSBSim的控制操作封装了飞行控制系统(FCS)的功能. 这个FGFCS类还封装了相同的“系统”和“自动驾驶仪”能力. FGFCS包含用来定义一个系统或飞行模型体 ...
- iOS开发中各种关键字的区别
1.一些概念 1.浅Copy:指针的复制,只是多了一个指向这块内存的指针,共用一块内存. 深Copy:内存的复制,两块内存是完全不同的, 也就是两个对象指针分别指向不同的内存,互不干涉. 2.atom ...
- [Java学习] 再谈Java包
在Java中,为了组织代码的方便,可以将功能相似的类放到一个文件夹内,这个文件夹,就叫做包. 包不但可以包含类,还可以包含接口和其他的包. 目录以"\"来表示层级关系,例如 E:\ ...
- Confluence 6 嵌套用户组的影响
本部分说明了嵌套用户组对用户登录,权限和查看更新用户组的影响. 登录 如果用户属于一个授权的用户组或者授权用户组中的子用户组,当用户登录后,用户可以访问应用程序. 权限 如果用户属于的用户组或者用户组 ...