题目链接:https://zhixincode.com/contest/14/problem/A?problem_id=203

time limit per test: 1 second
memory limit per test: 256 megabytes
input: standard input
output: standard output

样例输入 1 

5
5 3 4 1 2

样例输出 1

3 4 2 5 1

题解:

首先例如 $p = [3,4,2,1]$,则 $A(p) = [3,3,2,1]$;然后相应的 $q = [4,3,1,2]$,长度为 $4$ 的前缀其中最小值为 $1$($A(p)_{4} = 1$),因此 $4$ 排在 $q$ 的第一位。

不难发现,一般来讲,长度越长的前缀,相应的在 $q$ 中应该排在越前面,但是如果出现长度长的前缀出现在长度短的前缀的后面呢?只可能是因为它们对应的 $A(p)_{?}$ 值是相等的,长度长的才会排后面。而且我们进一步可以发现,在 $q$ 中,若某一段是递增的,那么这一段是必然是连续的,这个靠反证一下就很容易证明。

因此我们可以将 $q$ 划分成若干段,每一段都是连续递增的,而前一段中任意数必然大于后一段中的任意数。

例如上面举的例子 $q = [4,3,1,2]$ 就可以分成 $[[4],[3],[1,2]]$,然后我们观察一下这个序列分成了三段,因此对应的 $A(p)$ 就只有三个数:$\{1,2,3\}$,$A(p)$ 的第 $4$ 位是最小的,即等于 $1$;然后第 $3 $ 位是次小的,即$A(p)_{3} = 2$;然后排在最后的一段 $A(p)_{1} = A(p)_{2} = 3$ 是最大的。再然后,我们可以知道 $A(p)$ 是一个只会不严格单调递减的序列,相应地可以很容易推出字典序最小的 $p$。

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
int n,q[maxn],p[maxn];
int main()
{
scanf("%d",&n);
int now=;
for(int i=;i<=n;i++)
{
scanf("%d",&q[i]);
if(i== || q[i-]>q[i]) p[q[i]]=++now;
}
for(int i=;i<=n;i++) if(!p[i]) p[i]=++now;
for(int i=;i<=n;i++) printf("%d ",p[i]);
}

CCPC-Wannafly Winter Camp Day3 Div1 - 排列的更多相关文章

  1. 2020 CCPC Wannafly Winter Camp Day1 C. 染色图

    2020 CCPC Wannafly Winter Camp Day1 C. 染色图 定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任 ...

  2. 【CCPC-Wannafly Winter Camp Day3 (Div1) G】排列(水题)

    点此看题面 大致题意:已知 \(p\)为\(n\)的一个排列,定义\(A(p)_i=min_{j=1}^ip_j\),若用\(q_i\)表示\(p\)第\(i\)小的前缀的长度(以值为第一关键字,下标 ...

  3. CCPC Wannafly Winter Camp Div2 部分题解

    Day 1, Div 2, Prob. B - 吃豆豆 题目大意 wls有一个\(n\)行\(m\)列的棋盘,对于第\(i\)行第\(j\)列的格子,每过\(T[i][j]\)秒会在上面出现一个糖果, ...

  4. Wannafly Winter Camp Day8(Div1,onsite) E题 Souls-like Game 线段树 矩阵乘法

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog @ Problem:传送门  Portal  原题目描述在最下面.  简单的 ...

  5. CCPC-Wannafly Winter Camp Day3 Div1 - 精简改良 - [生成树][状压DP]

    题目链接:https://zhixincode.com/contest/14/problem/D?problem_id=206 样例输入 1  5 5 1 2 1 1 3 1 2 4 1 2 5 1 ...

  6. CCPC-Wannafly Winter Camp Day3 Div1 - 石头剪刀布 - [带权并查集]

    题目链接:https://zhixincode.com/contest/14/problem/I?problem_id=211 样例输入 1  3 5 2 1 1 2 1 2 1 1 2 3 2 1 ...

  7. 【CCPC-Wannafly Winter Camp Day3 (Div1) F】小清新数论(莫比乌斯反演+杜教筛)

    点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...

  8. 【CCPC-Wannafly Winter Camp Day3 (Div1) D】精简改良(状压DP)

    点此看题面 大致题意: 给你一张图,定义\(dis(i,j)\)为\(i\)与\(j\)的最短距离,现要求删去若干条边,使得图仍然联通,且\(\sum_{i=1}^n\sum_{j=i+1}^ndis ...

  9. 【CCPC-Wannafly Winter Camp Day3 (Div1) I】石头剪刀布(按秩合并并查集)

    点此看题面 大致题意: 有\(n\)个人,第\(i\)个人坐在编号为\(i\)的座位上,每个人等概率有石头.剪刀.布中的一张卡片.有两种操作:第一种是第\(y\)个人挑战第\(x\)个人,如果胜利则\ ...

随机推荐

  1. 安装Logtail(Linux系统)

    Logtail客户端是日志服务提供的日志采集客户端,请参考本文档,在Linux服务器上安装Logtail客户端. 支持的系统 支持如下版本的Linux x86-64(64位)服务器: Aliyun L ...

  2. Android Studio 常用快捷键 for mac

    Android Studio 常用快捷键 for mac 查找/查看相关 ⌘O: 全局查找class类名<使用率非常高> ⌘F: 在当前编辑文件中查找<使用率非常高> | 对应 ...

  3. PHP —— 识别运算符实现逻辑比较

    最近遇到一个功能的开发,大致意思就是根据用户输入的条件,进行相关的比较操作.本来打算使用用户选择运算符的方式,但是后来结合项目实际,发现需要使用用户输入的自定义运算比较现实一点.大致意思就是: 1.用 ...

  4. java 路径分隔符自动适配

    linux文件路径分隔符为 /  ,windows的文件路径分隔符为  \   ,在开发项目过程中不确定用户使用何种操作系统,就需要自动适配路径. 目前已知java提供两种方法获取文件路径分割符: F ...

  5. 如何用javac 和java 编译运行整个Java工程

    转自:http://blog.csdn.net/huagong_adu/article/details/6929817      前言:本文教你怎么用javac和Java命令,以及如何利用脚本(she ...

  6. Python 读取csv的某行

    站长用Python写了一个可以提取csv任一列的代码,欢迎使用.Github链接 csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格: 就可以存 ...

  7. Node入门教程(12)第十章:Node的HTTP模块

    Ryan Dahl开发node的初衷就是:把Nginx非阻塞IO功能和一个高度封装的WEB服务器结合在一起的东东.所以Node初衷就是为了高性能的Web服务器去的,所以:Node的HTTP模块也是核心 ...

  8. VMware 虚拟机磁盘

    创建磁盘时,会进行两个操作:分配空间.置零 1.厚置备延迟置零: 默认的创建格式,创建磁盘时,直接从磁盘分配空间,但对磁盘保留数据不 置零.所以当有I/O操作时,只需要做置零的操作. 磁盘性能较好,时 ...

  9. Mac mysql 修改密码

    如果你知道密码: mysqladmin -u root -p password 新密码 MYSQL数据库密码忘记: 1. 在系统偏好 中,中止MYSQL服务.: 2. cd/usr/local/mys ...

  10. win 停止tomcat

    1.首先查找到占用8080端口的进程号PID是多少 CMD>netstat -ano | findstr 8080 这个命令输出的最后一列表示占用8080端口的进程号是多少,假设为1234 2. ...