Luogu1801_黑匣子_KEY
借这道题练一下Treap和Splay的板子。
code:
#include <cstdio>
#include <cstdlib>
using namespace std; int read()
{
char c;while(c=getchar(),(c<''||c>'')&&c!='-');
int x=,y=;c=='-'?y=-:x=c-'';
while(c=getchar(),c>=''&&c<='')x=x*+c-'';
return x*y;
} int N,M,a[],b[];
int root=,tr[][],v[],f[],rd[];
int cnt=; void rotate(int &x,int o)
{
int k=tr[x][o];
tr[x][o]=tr[k][o^];
tr[k][o^]=x;
f[k]=f[x];
f[x]=f[tr[x][]]+f[tr[x][]]+;
x=k;
} void insert(int &x,int val)
{
if(!x){
x=++cnt;
v[x]=val;
f[x]++;
rd[x]=rand();
return ;
}
f[x]++;
int to=val>v[x];
insert(tr[x][to],val);
if(rd[tr[x][to]]>rd[x])rotate(x,to);
return ;
} int Query(int x,int kth)
{
if(!x)return -;
if(f[tr[x][]]>=kth)return Query(tr[x][],kth);
if(f[tr[x][]]+<kth)return Query(tr[x][],kth-f[tr[x][]]-);
return v[x];
} int main()
{
srand();
N=read(),M=read();
register int i,j;
for(i=;i<=N;i++)a[i]=read();
for(i=;i<=M;i++)b[i]=read();
j=;
for(i=;i<=N;i++){
insert(root,a[i]);
while(i==b[j])
printf("%d\n",Query(root,j)),j++;
}
}
Treap
#include <cstdio>
using namespace std; int root,cnt;
int tr[][],f[],v[],fa[]; int get(int x){return x==tr[fa[x]][];}
void up(int x){f[x]=f[tr[x][]]+f[tr[x][]]+;}
int rotate(int x)
{
int ol=fa[x],olol=fa[ol],to=get(x);
tr[ol][to]=tr[x][to^],fa[tr[x][to^]]=ol;
tr[x][to^]=ol;fa[ol]=x;
fa[x]=olol;
if(olol)
tr[olol][ol==tr[olol][]]=x;
up(ol);up(x);
} void splay(int x)
{
for(int S;S=fa[x];rotate(x))
if(fa[S])
rotate(get(x)==get(S)?S:x);
root=x;
} int dist;
void insert(int &x,int val,int pos)
{
if(!x){
x=++cnt;
v[x]=val;
fa[x]=pos;
f[x]++;
dist=cnt;
return ;
}
int to=val>v[x];
insert(tr[x][to],val,x);
up(x);
return ;
} int Query(int x,int kth)
{
if(!x)return -;
if(f[tr[x][]]>=kth)return Query(tr[x][],kth);
if(f[tr[x][]]+<kth)return Query(tr[x][],kth-f[tr[x][]]-);
return v[x];
} int N,M,a[],b[]; int read()
{
char c;while(c=getchar(),(c<''||c>'')&&c!='-');
int x=,y=;c=='-'?y=-:x=c-'';
while(c=getchar(),c>=''&&c<='')x=x*+c-'';
return x*y;
} int main()
{
N=read(),M=read();
register int i,j;
for(i=;i<=N;i++)a[i]=read();
for(i=;i<=M;i++)b[i]=read();
j=;
for(i=;i<=N;i++){
insert(root,a[i],);splay(dist);
while(i==b[j])printf("%d\n",Query(root,j)),j++;
}
return ;
}
Splay
Luogu1801_黑匣子_KEY的更多相关文章
- 黑匣子_KEY
黑匣子 (box.pas/c/cpp) [ 问题描述] 某研究小组成员想发明一个黑匣子( 当然不是飞机上那个), 而是一个具有特殊功能的箱子. 这个箱子具有两个功能: 1. 存放一些正整数 x: 2. ...
- 塔吊力矩限制器,塔吊黑匣子,塔吊电脑,tower crane
塔机力矩限制器,tower crane 适用于各种类型的固定臂塔机和可变臂塔机 塔机力矩限制器是塔式起重机机械的安全保护装置,本产品采用32位高性能微处理器为硬件平台,软件算法采用国内最先进的三滑轮取 ...
- 代码详解:TensorFlow Core带你探索深度神经网络“黑匣子”
来源商业新知网,原标题:代码详解:TensorFlow Core带你探索深度神经网络“黑匣子” 想学TensorFlow?先从低阶API开始吧~某种程度而言,它能够帮助我们更好地理解Tensorflo ...
- 【洛谷】【堆】P1801 黑匣子_NOI导刊2010提高(06)
[题目描述:] Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两 ...
- P1801 黑匣子_NOI导刊2010提高(06)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
- Luogu P1801 黑匣子_NOI导刊2010提高(06)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
- 【洛谷P1801】黑匣子
黑匣子 题目链接 看到题解中“维护两个堆”,突然想到了这道题的解法 维护两个堆:大根堆h1, 小根堆h2 大根堆里的是最小的i个值,小根堆里是剩下的值 每Add一个值时 插入到小根堆中, 再比较小根堆 ...
- 洛谷 - P1801 - 黑匣子 - 对顶堆
这道题是提高+省选-的难度,做出来的话对数据结构题目的理解会增加很多. 可以使用一种叫做对顶堆的东西,对顶堆是在线维护第n小的logn的算法.大概的思路是,假如我们要找的是第n小,我们就维护一个大小为 ...
- 洛谷 P1801 黑匣子_NOI导刊2010提高(06)(未完)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
随机推荐
- Eclipse中的BuildPath详解【转载】
什么是Build Path? Build Path是指定Java工程所包含的资源属性集合. 在一个成熟的Java工程中,不仅仅有自己编写的源代码,还需要引用系统运行库(JRE).第三方的功能扩展库.工 ...
- 《C++之那些年踩过的坑(一)》
C++之那些年踩过的坑(一) 作者:刘俊延(Alinshans) 本系列文章针对我在写C++代码的过程中,尤其是做自己的项目时,踩过的各种坑.以此作为给自己的警惕. 转载请注明原文来自: http:/ ...
- 数论——算数基本定理 - HDU 4497 GCD and LCM
GCD and LCM Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total ...
- OAuth2.0认证和授权机制讲解
第一章.OAuth2.0 介绍 OAuth认证 OAuth认证是为了做到第三方应用在未获取到用户敏感信息(如:账号密码.用户PIN等)的情况下,能让用户授权予他来访问开放平台(主要访问平台中的资源服务 ...
- [AHOI2001]多项式乘法
\([Link](https://www.luogu.org/problemnew/show/P2553)\) \(\color{red}{\mathcal{Description}}\) 给出两个多 ...
- Java语言实现通过Ajax抓取后台数据及图片
1.Java语言实现通过Ajax抓取后台数据及图片信息 1.1数据库设计: create table picture( pic_id number not null, pic_name )not nu ...
- Unity Loding白屏
卡loading很多时候是由于网络原因造成的,你可以尝试断网,进入离线模式.如果使用VPN也可以先关闭使用,部分Vpn的配置也会导致该问题出现.最后可以查看一下防火墙的设置.
- 使用yum命令时提示:Another app is currently holding the yum lock
yum正在使用,用kill命令杀死进程就可以了. 1.查看yum使用进程号 ps aux|grep yum 2.杀死进程 kill -9 进程号
- iOS项目启动及启动时间优化
app的启动入口Main函数: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc ...
- Instruments Time profiler 调优APP 之图片解码
以前闲时用instruments的Time profiler调试过APP,发现用tableView: cellForRowAtIndexPath: 中cell的图片设置耗时较多,之前改了一下,如下 d ...