sd省队集训d1t1
来源:互联网 发布:看程序员直播 编辑:程序博客网 时间:2024/05/22 14:24
还在学splay 就用splay a了一个题、、
全场rank5、、
码:
#include<iostream>#include<cstdio>#include<map>#include<algorithm>using namespace std;#define N 200005int ch[N][2],fu[N],sz[N],v[N],dui[N],rt,k,n,i,linl,ddui[N];struct sr{int wz;int zhi;}woc[N];struct lianbiao{int q;int h;int zhi;}lb[N];int getwh(int o){return ch[fu[o]][0]==o?0:1;}void up(int o){sz[o]=sz[ch[o][0]]+sz[ch[o][1]]+1;}void set(int o,int wh,int child){ch[o][wh]=child;if(child!=0)fu[child]=o;up(o);}void rotate(int o){int fa=fu[o];int ye=fu[fa];int wh=getwh(o);set(fa,wh,ch[o][wh^1]);set(o,wh^1,fa);fu[o]=ye;if(ye!=0)ch[ye][ch[ye][0]==fa?0:1]=o;}void splay(int o,int tar){for(;fu[o]!=tar;rotate(o)) if(fu[fu[o]]!=tar) getwh(o)==getwh(fu[o])?rotate(fu[o]):rotate(o); if(tar==0) rt=o;}int tot;int xin(int zhi){int now= ++tot;v[now]=zhi;sz[now]=1;lb[zhi].zhi=zhi;return now;}void ins(int zhi){ int o=xin(zhi);int p=rt,l=0;while(p!=0){l=p;if(v[p]<zhi)p=ch[p][1];else p=ch[p][0];}if(l==0){rt=o;return;}if(v[l]>zhi)set(l,0,o);else set(l,1,o);splay(o,0);}void qlianjie(int a,int b){ lb[lb[b].q].h=a;lb[a].q=lb[b].q;lb[a].h=b;lb[b].q=a;}void hlianjie(int a,int b){ lb[lb[a].h].q=b;lb[b].q=a;lb[b].h=lb[a].h;lb[a].h=b;}int find(int zhi){ //if(zhi==0)cin>>n;int wz=0;int p=rt;int l=0;while(p!=0){l=p;if(v[p]<zhi){wz+=sz[ch[p][0]]+1;p=ch[p][1];}else{p=ch[p][0];}}//splay(p,0);p=rt;if(wz==sz[rt]){//跟在最大一个数后面 while(ch[p][1])p=ch[p][1];hlianjie(v[p],zhi);}else{ if(sz[rt]-k>=wz)wz=sz[rt]-k+1; else wz=wz+1; while(p!=0){if(wz==sz[ch[p][0]]+1)break;if(wz>sz[ch[p][0]]+1){wz-=(sz[ch[p][0]]+1);p=ch[p][1];}else{p=ch[p][0];}}//if(p==0)cout<<zhi,cin>>n;qlianjie(zhi,v[p]);splay(p,0);}}bool cmp(sr a,sr b){return a.zhi<b.zhi;}int main(){scanf("%d%d",&n,&k);for(i=1;i<=n;i++){scanf("%d",&woc[i].zhi);woc[i].wz=i; } sort(woc+1,woc+1+n,cmp);for(i=1;i<=n;i++){ dui[woc[i].wz]=i;ddui[i]=woc[i].zhi;}linl=dui[1];lb[linl].q=0;lb[linl].h=-1;lb[linl].zhi=dui[i];lb[0].h=linl;ins(linl);for(i=2;i<=n;i++){ linl=dui[i];//cout<<linl<<" ";find(linl);ins(linl);}linl=lb[0].h;//printf("\n\n\n");while(linl!=-1){printf("%d\n",ddui[linl]);linl=lb[linl].h;}}
阅读全文
0 0
- sd省队集训d1t1
- sd省队集训二轮tree
- 省队集训 water
- 省队集训DAY2
- 省队集训DAY3
- 省队集训DAY4
- 省队集训DAY5
- 省队集训DAY6
- 7.5省队集训 tree
- 7.10省队集训梦工厂
- SDOI2016第一轮省队集训
- 省队集训Round2 DAY1
- 省队集训Round2 DAY2
- 省队集训Round2 DAY3
- 省队集训Round2 DAY7
- 省队集训Round3 DAY1
- 省队集训Round3 DAY2
- 省队集训Round3 DAY4
- 51Nod-1468-小Y的IP地址
- macOS下的串口调试助手——CoolTerm的使用
- Python---计算器功能实现
- Supervised Learning
- 机器学习
- sd省队集训d1t1
- jQuery对ajax的支持
- 【洛谷P3818】小A和uim之大逃离 II
- 何为面向服务(Service)?及其由来与规则
- 卡方函数和皮尔逊函数选取最佳特征
- 旋转数组的最小数字
- E: 无法获得锁 /var/lib/dpkg/lock – open (11: 资源暂时不可用)
- Scala消息通信之akka,akka案例
- Control Smart Car By Arduino