题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4028

题意:

有一个长度为n的序列A,你不知道这个序列的中每个元素是什么,只知道

  1. F[x]表示以第x个元素结尾的最长上升子序列长度(绝对单调)
  2. 第x个数的取值范围为L[x]到R[x](闭区间)

求恢复序列A,只要满足条件就可以了,保证有解,输出任意一种

思路:

网上题解好像都是差分约束,还要用到SPFA,其实只要贪心就行了

稍加分析可以得出:对于第x个数字a[x],只需要满足最多两个条件即可

  1. a[x] ≤ a[y](其中y是离x最近的满足F[y] = F[x]的位置,y<x,可能不存在)
  2. a[x] > a[k](其中k是离x最近的满足F[k]+1 = F[x],k<x,可能不存在)

然后再仔细分析一波你会发现,这些不等式可以连成一条有向无环图,而对于有向无环不等式关系,很明显可以从入度为0的点开始直接贪心,每次只要填入的数尽可能小即可!!

具体贪心顺序是:以F[x]从小到大为第一顺序,相同F[x]以位置从后往前为第二顺序填数

复杂度线性,具体过程如代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<string>
#include<math.h>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
#define LL long long
#define mod 1000000007
int a[100005], L[100005], last[100005], ans[100005];
vector<int> G[100005];
typedef struct Res
{int l;int r;
}Res;
Res s[100005];
int main(void)
{int T, n, i, j, now, loc;scanf("%d", &T);while(T--){scanf("%d", &n);for(i=1;i<=n;i++){scanf("%d", &a[i]);G[i].clear();}for(i=1;i<=n;i++)scanf("%d%d", &s[i].l, &s[i].r);for(i=1;i<=n;i++){last[a[i]] = i;L[i] = last[a[i]-1];}for(i=n;i>=1;i--)G[a[i]].push_back(i);for(i=1;i<=n;i++){for(j=0;j<G[i].size();j++){loc = G[i][j];if(j==0){if(i==1)now = s[loc].l;elsenow = max(ans[L[loc]]+1, s[loc].l);}else{if(i==1)now = max(s[loc].l, now);elsenow = max(ans[L[loc]]+1, max(s[loc].l, now));}ans[loc] = now;}}printf("%d", ans[1]);for(i=2;i<=n;i++)printf(" %d", ans[i]);puts("");}return 0;
}

ZOJ 4028 15th浙江省省赛E. LIS(神奇贪心)相关推荐

  1. LIS ZOJ - 4028

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4028 memset超时 这题竟然是一个差分约束 好吧呢 对于每一个a[i] ...

  2. 河南省赛 导弹发射 lis

    导弹发射 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 Alpha 机构研发出一种新型智能导弹,它能够在雷达检测到的区域内,选择一条前进的路径, 击破路径上所有的目标物 ...

  3. ZOJ-4107 Singing Everywhere 2019浙江省省赛

    题目链接 Sample Input 3 6 1 1 4 5 1 4 7 1 9 1 9 8 1 0 10 2 1 4 7 4 8 3 6 4 7 Sample Output 1 0 2 题意,给定一个 ...

  4. 18th 浙江省省赛 F. Fair Distribution

    题目链接:https://codeforces.com/gym/103055/problem/F 题面: 给你一个n表示有多少机器人,m表示有多少能量棒.机器人每次只能减少,能量棒每次只能增加,消耗1 ...

  5. HDU 5246 超级赛亚ACMer 【贪心】【STL版本二分】

    超级赛亚ACMer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. CodeForces - 1304D Shortest and Longest LIS(构造+贪心)

    题目链接:点击查看 题目大意:题目给出 n - 1 个大小关系,分别代表一个长度为 n 的数列各个位置的相对大小,现在需要我们用两个符合相对大小关系的 1 ~ n 的一个排列,且该排列的最长不下降子序 ...

  7. 中石油训练赛 - 围栏翻新(思维+贪心+差分)

    题目描述 小明的破旧围栏又要喷涂油漆了.围栏由N个木板构成,每个宽度都为1cm,但是高度各不相同.他给自己买了一个喷漆机器,喷涂头恰好也是1cm宽. 小明的喷漆机器是直接喷射的,因此喷头的每一个部位必 ...

  8. 【ZOJ - 3715】Kindergarten Election(枚举得票数,贪心)

    题干: At the beginning of the semester in kindergarten, the n little kids (indexed from 1 to n, for co ...

  9. ZOJ 3987 2017CCPC秦皇岛 G:Numbers(高精度+贪心)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3987 题意: 给你两个数n和m,你要将n拆成m个数,使得这m个数 ...

最新文章

  1. ubuntu16.04安装opencv3.4.1教程
  2. 文件夹的位置_win10添加网络位置向导 提示:‘输入的文件夹似乎无效。请选择另一个’解决方法...
  3. 28篇标志性论文见证「自然语言处理NLP」2019-2020年度亮点进展
  4. 操作Frame和IFrame中页面元素
  5. 国庆中秋活动——读完这两套书,宝宝就变小小物理学家了!
  6. Cocos2d-x 结合Box2D开发Android游戏配置方法
  7. Eureka Server集群同步
  8. SpringCloud工作笔记064---intellij idea 如何将一个普通项目转换为maven项目
  9. 表面粗糙度的基本评定参数是_表面粗糙度100个常见问题
  10. 为什么优酷的《楚乔传》画质更清晰?独家解密窄带高清技术
  11. 图像处理基础(8):图像的灰度直方图、直方图均衡化、直方图规定化(匹配)
  12. 从小白到大牛,程序员必读的经典套系书
  13. 七彩虹固态硬盘 慧荣SM2258XT主控开卡教程,SM2259XT2貌似差不多
  14. 用JAVA输入一位整数,当输入1-7时显示对应的英文星期名称缩写
  15. JPEG 图片存储格式与元数据解析
  16. Microbiome:鸡肠道微生物宏基因集的构建(张和平、魏泓、秦楠点评)
  17. 写一个获取非行间样式的函数
  18. webpack 深入浅出分析之打包 JS、ES6 和 Typescript
  19. ANSYS - 表格加载方法
  20. CToolBar的使用总结(1)

热门文章

  1. 亚马逊首席科学家:揭秘 Alexa 语音识别技术|AI NEXT
  2. 手机重装android系统,手机系统重装
  3. 【java笔记】lambda表达式介绍和使用
  4. LeetCode 72 编辑距离
  5. c++vector查找元素所在的索引下标
  6. 最简单的视音频播放示例1:总述
  7. java连接虚拟机hadoop_本地eclipse java api连接远程虚拟机HBase
  8. layUI禁用select下拉框
  9. layui-table 多一列问题
  10. Python3 GUI编程: 自带图形库 tkinter 学习教程