P3165 [CQOI2014]排序机械臂

传送门

就是说要维护一个数据结构资瓷区间反转和查询第\(K\)大,那么splay吧
我们可以把原数组按高度为第一关键字,下标为第二关键字排序,然后直接建出splay
这样的话每次第\(K\)大直接查询编号然后把它转到根节点,那么左子树大小+1就是下标了,区间反转打标记就好了

//minamoto
#include<bits/stdc++.h>
#define R register
#define inf 0x3f3f3f3f
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){R int res,f=1;R char ch;while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');return res*f;
}
char sr[1<<21],z[20];int C=-1,Z=0;
inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
void print(R int x){if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x;while(z[++Z]=x%10+48,x/=10);while(sr[++C]=z[Z],--Z);sr[++C]=' ';
}
const int N=1e5+5;
struct node{int id,k;friend bool operator <(const node &a,const node &b){return a.k==b.k?a.id<b.id:a.k<b.k;}
}a[N];
int ch[N][2],fa[N],sz[N],tag[N],rt,n,ans,xx,yy;
inline int get(R int x){return ch[fa[x]][1]==x;}
inline void upd(R int x){sz[x]=sz[ch[x][0]]+sz[ch[x][1]]+1;}
void pd(R int x){if(tag[x]){if(ch[x][0])tag[ch[x][0]]^=1;if(ch[x][1])tag[ch[x][1]]^=1;swap(ch[x][0],ch[x][1]),tag[x]=0;}
}
void rotate(R int x){int y=fa[x],z=fa[y],d=get(x);pd(y),pd(x);ch[y][d]=ch[x][d^1],fa[ch[y][d]]=y,ch[x][d^1]=y,fa[y]=x,fa[x]=z;if(z)ch[z][ch[z][1]==y]=x;upd(y);
}
void splay(R int x,R int goal){for(R int y=fa[x],z=fa[y];y!=goal;y=fa[x],z=fa[y]){pd(z),pd(y),pd(x);if(z!=goal)rotate(get(x)==get(y)?y:x);rotate(x);}if(!goal)rt=x;
}
void build(R int l,R int r,R int fat){if(l>r)return;R int mid=(l+r)>>1;ch[fat][mid>fat]=mid,sz[mid]=1,fa[mid]=fat;if(l==r)return;build(l,mid-1,mid),build(mid+1,r,mid);upd(mid);
}
int Kth(int x){int now=rt;while(true){pd(now);if(ch[now][0]&&x<=sz[ch[now][0]])now=ch[now][0];else{x-=sz[ch[now][0]]+1;if(!x)return now;now=ch[now][1];}}
}
int main(){
//  freopen("testdata.in","r",stdin);n=read();fp(i,2,n+1)a[i].k=read(),a[i].id=i;a[1].id=1,a[1].k=-inf,a[n+2].id=n+2,a[n+2].k=inf;sort(a+1,a+n+3),build(1,n+2,0),rt=(n+3)>>1;fp(i,2,n){splay(a[i].id,0),ans=sz[ch[rt][0]]+1;print(ans-1),xx=Kth(i-1),yy=Kth(ans+1);splay(xx,0),splay(yy,xx);tag[ch[ch[rt][1]][0]]^=1;}print(n);return Ot(),0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10078567.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

靠,嘉立创打板又降价

说个题外话&#xff0c;我前段时间和同事聊天&#xff0c;我同事是一个项目经理&#xff0c;我跟他说我有朋友在嘉立创&#xff0c;然后随口说了句&#xff0c;我们这个行业应该没有不知道嘉立创的吧&#xff0c;我同事回了一句&#xff0c;什么是嘉立创&#xff0c;然后我愣了…

动态提示的下拉框

<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"> <META content"fason,阿信" nameAuthor> <title>动态提示的下拉框</title> <style> a{color:red;text-decoratio…

深度解析Cocoa异步请求和libxml2.dylib教程(1)

深度解析Cocoa异步请求和libxml2.dylib教程是本文要介绍的内容&#xff0c;不多说&#xff0c;直接进入话题&#xff0c;很早就在cocoachina上看到这个框架了,今天终于有机会来使用这个东东了. 我这里写一下,如何往iphone项目中添加这个框架. 步骤如下: 1.下载该framework : ht…

UDT源码剖析(四):UDT的GC线程相关过程代码注释

着UDT::Startup()的启动&#xff0c;GC线程也随之运行了。 GC主要关注的就是UDTSocket的释放&#xff0c;下面我们来看看这个GC线程是怎么实现的。 查看源代码 打印帮助1 #ifndef WIN32 2 void* CUDTUnited::garbageCollect(void* p) 3 #else 4 DWORD WINAPI CUDTUnited:…

那年高考

每年高考&#xff0c;都会让我想起很多事情。我第一次高考前几天&#xff0c;我舅舅和舅娘过来看我&#xff0c;他们拉我到教室后门&#xff0c;我舅说我妈叮嘱他一定来看我&#xff0c;然后跟我说不要给自己太大压力&#xff0c;啰嗦了几分钟&#xff0c;要走的时候硬塞给我10…

vimdiff的简单使用

Vimdiff的使用 1、首先vimdiff是一款高效的文件的比较和合并的工具&#xff0c;它具有以下一些特点&#xff1a;命令行方式的比较工具&#xff1b;简单明了的界面&#xff1b;对比较出来的多处差异之间快速定位&#xff1b;进行文件合并。再使用vimdiff命令之前&#xff0c;我们…

拆解一个比亚迪的车钥匙,这个黑黑的元器件是什么?

今天抽屉突然找到一个比亚迪的车钥匙&#xff0c;寻思着没事拆开看看用什么方案做的。正面照&#xff0c;哪款车型的&#xff0c;不知道了背面照&#xff0c;很简洁&#xff0c;只有一个BYD的Logo接下来就是撬开了&#xff0c;过程非常顺利&#xff0c;之前撬开一个宝马车的钥匙…

分布式事物(同样适用于dubbo事务等分布式事务)

转载于:https://www.cnblogs.com/tian1993/p/10081901.html

一些web开发中常用的、做成cs文件的js代码 - 搜刮来的

using System;using System.Web;using System.Web.UI;namespace COCOWO.COMP{ /// <summary> /// 一些常用的Js调用 /// 创建时间&#xff1a;2006-8-3 /// 创建者&#xff1a;马先光 /// </summary> public class Jscript { …

库里扛起了勇士对凯尔特人的第四场

最近临近毕业季&#xff0c;有朋友这样说「我一定是要支持勇士的&#xff0c;毕竟库里和詹姆斯陪了整个大学四年啊」。昨晚上加班到11点半&#xff0c;到家洗完澡已经是凌晨1点了&#xff0c;那时候是想得很清楚的&#xff0c;明天是不想被其他事情打扰我看球赛的。这场比赛&am…

Nginx应用案例分享:压力测试

2019独角兽企业重金招聘Python工程师标准>>> 在运维工作中&#xff0c;压力测试是一项非常重要的工作。比如在一个网站上线之前&#xff0c;能承受多大访问量、在大访问量情况下性能怎样&#xff0c;这些数据指标好坏将会直接影响用户体验。 但是&#xff0c;在压力…

shell 判断文件是否存在,没有则创建

没有该文件则创建&#xff0c;有则 ls -l 输出文件信息。 #!/bin/bash echo "enter the name:" read filename if test -e $filename ; then ls -l $filename else touch $filename fi 输出 enter the name: sss.sh -rwxr-xr-x 1 root root 147 Dec 3 09:02 sss.sh …

声音是什么?

转自博客园《【秒懂音视频开发】02_重识声音》&#xff0c;https://www.cnblogs.com/mjios/p/14466418.html#5035688#!comments声音的产生声音&#xff08;Sound&#xff09;&#xff0c;是由物体的振动产生的。一切正在发声的物体都在振动。我们说话的时候&#xff0c;是声带在…

c#中的常用ToString()方法总结。

很多类都重写了ToString方法&#xff0c; 导致很多类的tostring到底执行了什么&#xff0c;有哪些参数&#xff0c;都不清楚。。。。很郁闷&#xff01;对于int&#xff0c;double等的tostring&#xff1a;C 货币 2.5.ToString("C") &#xffe5;2.50…

UDT源码剖析(五):UDT::cleanup()过程代码注释

调用路线 UDT::cleanup()->CUDT::cleanup()->CUDTUnited::cleanup() 1 int CUDTUnited::cleanup() 2 { 3 // 锁保护 4 CGuard gcinit(m_InitLock); 5 6 // 如果还有实例运行&#xff0c;则到此为止了 7 if (--m_iInstanceCount > 0) 8 return 0; …

《星辰傀儡线》人物续:“灭世者”、“疯狂者”、“叛逆者”三兄妹

“灭世者”、“疯狂者”、“叛逆者”三兄妹&#xff1a;“灭世者”黑卡蒂&#xff1a;卡西欧家族的科技天才&#xff0c;沉默&#xff0c;不爱说话&#xff0c;一对亮闪闪的氪金眼&#xff0c;黑暗军团一战后&#xff0c;以“天空之镜”的设计者而闻名。柏拉图“理想国”的拥有…

[源码和文档分享]基于C语言的语法高亮设计与实现

一 需求分析 在所需高亮的关键字或字符串前后加上class标签&#xff0c;在css定义颜色。 二 程序设计 2.1 设计思路 把.html文件和.css文件中的内容存在两个字符数组中&#xff0c;在.cpp用文件操作写入。 2.2 文件组织架构 Syntax highlighting.exe所在目录为根目录 源代码命…

在.NET中用excel导出(概要)

首先要在项目->添加引用->COM中添加Microsoft Office Web Components &#xff0c;然后定义一个OWC.SpreadsheetClass 如&#xff1a;Dim xlsheet As New OWC.SpreadsheetClass 然后就可以向sheet中添加数据了&#xff0c;使用xlsheet.Cells(2, 2) "表格填充内容&q…

我愿为这二极管奉献我的一生

简 介&#xff1a; 利用二极管完成对信号的整流&#xff0c;求取绝对值等具有很多的应用。然而在小信号下&#xff0c;二极管的前向导通电压以及相应的杂散电容会对信号整流带来严重的影响。本文从“马场清太郎”所著的“运算放大器应用电路设计”中摘取了一些典型应用电路&…

61条Java面向对象设计的经验原则

1&#xff09;所有数据都应该隐藏在所在的类的内部。 &#xff08;2&#xff09;类的使用者必须依赖类的共有接口&#xff0c;但类不能依赖它的使用者。 &#xff08;3&#xff09;尽量减少类的协议中的消息。 &#xff08;4&#xff09;实现所有类都理解的最基本公…