【bzoj3506/1552】【robotic sort】【splay】
发布日期:2021-11-16 15:38:40
浏览次数:8
分类:技术文章
本文共 958 字,大约阅读时间需要 3 分钟。
Description
Input
输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000。第二行为N个用空格隔开的正整数,表示N个物品最初排列的编号。
Output
输出共一行,N个用空格隔开的正整数P1,P2,P3…Pn,Pi表示第i次操作前第i小的物品所在的位置。 注意:如果第i次操作前,第i小的物品己经在正确的位置Pi上,我们将区间[Pi,Pi]反转(单个物品)。
Sample Input
6
3 4 5 1 6 2
3 4 5 1 6 2
Sample Output
4 6 4 5 6 6
题解:splay维护区间最小值以及最小值的位置。
因为有相等的权值所以一开始排一遍序即可。
代码:
#include#include #include #include #define N 100010#define inf 2100000000using namespace std;int n,rev[N],c[N][3],d[N],sz,rt,v[N],size[N],fa[N],mn[N],pos[N],ans[N],s[N];struct use{int v,p;}a[N];bool cmp(use a,use b){return a.v r) return; if (l==r){ int now=l,pre=f;fa[now]=pre; if (l >1,now=mid,pre=f; build(l,mid-1,mid);build(mid+1,r,mid); fa[now]=pre;v[now]=mn[now]=a[now].v; pos[now]=now;update(now); if (mid =rank) return find(l,rank); else return find(r,rank-size[l]-1); }int query(int l,int r){ int x=find(rt,l),y=find(rt,r+2); //cout< <<' '< < >1; //for (int i=1;i<=n+2;i++) cout< <
转载地址:https://blog.csdn.net/sunshinezff/article/details/51067338 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月01日 17时38分21秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP使用curl_multi_add_handle并行处理
2019-04-27
NP问题
2019-04-27
AT&T与Intel汇编语言的比较
2019-04-27
javascript解析json
2019-04-27
WinDbg安装与使用
2019-04-27
推荐阅读的多核编程技术书籍
2019-04-27
维基百科上的算法和数据结构链接很强大
2021-06-30
选择排序
2021-06-30
PHP session回收机制
2021-06-30
最新的全球编程语言,操作系统,web服务器等使用率分析报告
2021-06-30
用C语言写PHP扩展
2021-06-30
PHP Extension programming
2021-06-30
海量数据处理
2021-06-30
PHP防止注入攻击
2021-06-30
多路IO复用模型 select epoll 等
2021-06-30
Linux Epoll介绍和程序实例
2021-06-30
output_buffering详细介绍
2021-06-30
php缓冲 output_buffering和ob_start
2021-06-30
php error_reporting 详解
2021-06-30
剖析PHP中的输出缓冲
2021-06-30