https://codeforces.com/contest/1158/problem/C

题目

已知 $p_1, p_2, \dots, p_n$ 是 $1$ 到 $n$ 的一个排列。

给出关于这个未知排列的一些描述:对于某些下标 $i$,$p_i$ 右边第一个大于 $p_i$ 的数的下标是 $R_i$ 。 $R_i = n + 1$ 意味着 $p_i$ 右边没有大于 $p_i$ 的数。

试问是否存在一个排列满足所有描述?若存在,任意给出一个这样的排列,若不存在,输出 -1 。

Constraints:

$ n \le 500000$

分析

很容易往拓扑序的方向思考。

$R_i = j$ 等价于

$p_i < p_j$
$p_{i+1} < p_i$
$p_{i+2} < p_i$
...
$p_{j - 1} < p_i$

若对每个不等式都往图中加一条边,则边数是 $O(n^2)$ 的。

怎样减少边的数量呢?或者说哪些边不用加进图里?

实际上,对于每个下标 $i$,可以只选择(能确定的)左边第一个比 $p_i$ 大的数所在的下标 $L_i$ 和右边第一个比 $p_i$ 大的数所在的下标 $R_i$ 。
换言之,只加入 $(i, R_i)$ 和 $(i, L_i)$ 这两条有向边就够了。
为什么是这样,请读者思考。

Codeforces 1158C Permutation recovery的更多相关文章

  1. Codeforces 1159E Permutation recovery(构造+拓扑)

    这道题其实只要解决了什么时候输出 -1 ,那么此题的构造方法也就解决了.首先我们可以观察这组 3 3 4 和 3 4 4 ,可以算出第二组是不成立的,在观察一组 2 3 4 5 和  3 2 4 5 ...

  2. hdoj 2404 Permutation Recovery【逆序对】

    Permutation Recovery Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  3. Permutation Recovery(模拟)

    Permutation Recovery Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  4. 贪心 CodeForces 137B Permutation

    题目传送门 /* 贪心:因为可以任意修改,所以答案是没有出现过的数字的个数 */ #include <cstdio> #include <algorithm> #include ...

  5. codeforces B. Permutation 解题报告

    题目链接:http://codeforces.com/problemset/problem/359/B 题目意思:给定n和k的值,需要构造一条长度为2n(每个元素取值范围只能是[1,2n])且元素各不 ...

  6. Codeforces 818B Permutation Game

    首先看一下题目 B. Permutation Game time limit per test 1 second memory limit per test 256 megabytes input s ...

  7. TOJ 2130: Permutation Recovery(思维+vector的使用)

    传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2130 时间限制(普通/Java): ...

  8. Codeforces - 1033C - Permutation Game - 简单dp - 简单数论

    https://codeforces.com/problemset/problem/1033/C 一开始觉得自己的答案会TLE,但是吸取徐州赛区的经验去莽了一发. 其实因为下面这个公式是 $O(nlo ...

  9. Codeforces 1295E. Permutation Separation (线段树)

    https://codeforces.com/contest/1295/problem/E 建一颗线段树,叶子结点是花费从1到i所需要花费的前缀和,表示前i个元素全部移动到右边的花费,再维护区间最小值 ...

随机推荐

  1. elasticsearch RestHighLevelClient 使用方法及封装工具

    目录 EsClientRHL 更新日志 开发原因: 使用前你应该具有哪些技能 工具功能范围介绍 工具源码结构介绍 开始使用 未来规划 git地址:https://gitee.com/zxporz/ES ...

  2. CUDA && GPU中dim3介绍

  3. Andrew NG 自动化所演讲(20140707):DeepLearning Overview and Trends

    出处 以下内容转载于 网友 Fiona Duan,感谢作者分享 (原作的图片显示有问题,所以我从别处找了一些附上,小伙伴们可以看看).最近越来越觉得人工智能,深度学习是一个很好的发展方向,应该也是未来 ...

  4. java对集合的操作,jxl操作excel

    http://www.cnblogs.com/epeter/p/5648026.html http://blog.sina.com.cn/s/blog_6145ed810100vbsj.html

  5. hadoop + ssh 配置

    1.输入 2.解决上述问题 3. 4.去掉登陆密码 5.不用密码登陆

  6. Java - 通过私有构造方法获取实例

  7. 使用Maven开发一个简单的SpringData

    1:创建Maven项目 2:添加依赖(修改pom.xml为以下代码) <project xmlns="http://maven.apache.org/POM/4.0.0" x ...

  8. PHP实现消息推送

    我们做web的时候偶尔会遇到消息推送,如图示例(红框位置) 当我们遇到这种功能要如何开发呢?下边将我了解的两种方法整理一下: 一.ajax轮询,定时去请求服务器数据 通过观察thinkphp官网貌似也 ...

  9. webpack的配置处理

    1.webpack对脚本的处理 1.Js用什么loader加载? 1>webpack 本身就支持js的加载, 2>通过babel-loader ES2015 加载js,再用 babel-p ...

  10. 【CSS】简略说明css的权重之分

    /*权重 :id > class > 标签 (小环境) 权重:内联 > 内部 > 外部 (大环境) 小环境处于内部环境中 */ <style> #p1{ /* id ...