题意

一个排列,每次选一个子序列按顺序放在开头,要求变成升序的操作次数不超过17次,给出方案。n<=1E5。


思考

对于ai=aj-1且i<j的数字,一定要保持其相对顺序。可以根据这个关系分成若干个块,并根据每个块最小的数从小到大将块编号为1~m。

接着把所有奇数编号的块选出来放在左侧。能发现这次操作后奇数编号和偶数编号的块至少有一半会变成更大的块。

复杂度O(nlogn)。


代码

 #include<bits/stdc++.h>
using namespace std;
const int maxn=1E5+;
int n,a[maxn],b[maxn],bucket[][maxn];
int m,where[maxn],bel[maxn];
bool check()
{
for(int i=;i<=n;++i)
if(a[i]!=i)
return false;
return true;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=;i<=n;++i)
cin>>a[i];
int now=;
while(!check())
{
++now;
for(int i=;i<=n;++i)
bucket[now][i]=a[i];
m=;
for(int i=;i<=n;++i)
where[a[i]]=i;
int pos=;
while(pos<=n)
{
bel[where[pos]]=m;
if(where[pos]>where[pos+]&&pos<=n)
++m;
++pos;
}
int tot=;
for(int i=;i<=n;++i)
b[i]=a[i];
for(int i=;i<=n;++i)
if(bel[i]&)
a[++tot]=b[i];
for(int i=;i<=n;++i)
if(!(bel[i]&))
a[++tot]=b[i];
}
cout<<now<<endl;
for(int i=;i<=now;++i,cout<<endl)
for(int j=;j<=n;++j)
cout<<bucket[i][j]<<" ";
for(int i=;i<=n;++i)
cout<<a[i]<<" ";
cout<<endl;
return ;
}

19_07_8校内训练[sort]的更多相关文章

  1. [校内训练19_09_10]sort

    题意 给一个非负整数序列,每次问能否异或上一个正整数使得所有的数单调不减.如果能,输出最小的x,否则输出-1.单点修改.多测.要求最多一个log. 思考 只要考虑相邻的两个数.找到这两个数最高的不同的 ...

  2. [3.24校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. ----------------------------------------------------------------------- ...

  3. 平面图转对偶图&19_03_21校内训练 [Everfeel]

    对于每个平面图,都有唯一一个对偶图与之对应.若G‘是平面图G的对偶图,则满足: G'中每一条边的两个节点对应着G中有公共边的面,包括最外部无限大的面. 直观地讲,红色标出来的图就是蓝色标出的图的对偶图 ...

  4. fzyzojP3618 -- [校内训练-互测20180412]士兵的游戏

    二分图匈牙利也可以 判断必须点就看能不能通过偶数长度的增广路翻过去 代码: (最后一个点4s多才行,,,卡不过算了) 开始边数写少了RE,应该是4*N*N M-R随手开了一堆int?都要是long l ...

  5. [校内训练20_01_20]ABC

    1.问有多少个大小为N的无标号无根树,直径恰好为L.$N,L \leq 200$ 2.问一个竞赛图中有多少个长度为3.4.5的环.$N \leq 2000$ 3.给出一些直线和单个点A,问这些直线的交 ...

  6. [校内训练20_01_19]ABC

    1.SB题 2.有n个点,m条边,每次加入一条边,你要挑出一些边,使得形成的图每个点度数都为奇数,且最长的边最短. 3.给一个N次多项式,问有多少个质数在任意整数处的点值都是p的倍数,输出它们.$N ...

  7. [校内训练19_09_02]A

    题意 给出N 个形如$f_i(x) = a_i x^2 + b_i x $的二次函数. 有Q 次询问,每次给出一个x,询问$max{\{f_i(x)\}}$.$N,Q \leq 5*10^5$. 思考 ...

  8. [4.14校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. hzwer又出丧题虐人 4道noi....        很奇怪 每次黄学长出题总有一题我做过了. 嗯题目你们自己看看呗 好难解释 ----- ...

  9. [2017.4.7校内训练赛by hzwer]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 报警啦.......hzwer又出丧题虐人啦..... 4道ctsc...有一道前几天做过了,一道傻逼哈希还wa了十几次,勉强过了3题..我好 ...

随机推荐

  1. 微信 HTML5 VIDEO 视频播放解决方案

    原文链接:https://www.jianshu.com/p/e4573acf6564 webkit-playsinline && playsinline="true&quo ...

  2. python单例设计模式

    class Dog(object): __instance = None def __init__(self): pass def __new__(cls): if not cls.__instanc ...

  3. Angular 利用 marked.js 添加 Markdown + HTML 同时渲染的 Pipe

    背景 最近在公司开发的一个项目需要在 Angular 上展示图文,并且需要同时支持 Markdown 和 HTML 对于同时支持 Markdown 和 HTML ,应该要分为编辑和渲染两部分考虑. 对 ...

  4. 【题解】[NOI2019Route](70分)

    占坑 做法是拆掉所有式子,拆完式子看一下,如果A=0,发现边被分为了终点走向n的边和不走向n的边.所以边就有了新的边权,并且可以相加.然后通过网络流建模的套路建模使得满足时间的限制,然后由于有负边,所 ...

  5. 「2015南阳CCPC D」金砖 解题报告

    金砖 Problem 有一个长度为L的板凳,可以放一排金砖,金砖不能重叠.特别的,摆放的金砖可以超出板凳,前提是必须保证该金砖不会掉下去,即该金砖的重心必须在板凳上. 每块金砖都一个长度和价值,且金砖 ...

  6. DispatcherServlet的url-pattern尽量不要配置为"/*"

    DispatcherServlet的url-pattern尽量不要配置为"/*" 原因 当Dispatcher的url配置为"/*"时,会把tomcat的web ...

  7. Ant Design 表单中getFieldDecorator、getFieldValue、setFieldValue用法

    Ant Design 表单中getFieldDecorator.getFieldValue.setFieldValue用法 一.getFieldDecorator getFieldDecorator是 ...

  8. 基于GMC/umat的复合材料宏细观渐近损伤分析(二)

    采用GMC/umat进行缠绕复合材料力学性能分析,将一些细节分享如下: 1.纤维缠绕复合材料内部交叉及波动分布受缠绕角度.缠绕线形的影响而不同,任意一种纤维缠绕结构其都存在层合区域.螺旋波动区域和环向 ...

  9. VMware下Hadoop 2.4.1完全分布式集群平台安装与设置

    1 VM下Ubuntu安装和配置 1.1 安装Ubuntu系统  这个就不说了,不知道的可以去看看其他的博文.   1.2 集群配置     搭建一个由3台机器组成的集群: IP user/passw ...

  10. 字符串String类常见算法题

    1.将一个字符串进行反转.将字符串中指定部分进行反转. public class StringDemo { //方式一:转换为char[] public String reverse(String s ...