汕头市队赛 SRM14 T2 最长上升子序列
最长上升子序列
(tree.pas/c/cpp) 128MB 1s
有一个长度为n的序列a[i],其中1到n的整数各自在a[i]中出现恰好一次。
现在已知另一个等长的序列f[i],表示a[i]中以第i个位置结尾的最长上升子序列的长度,请还原出a[i]。
输入格式
第一行一个正整数n。
接下来一行n个数,其中第i个数表示f[i]。
输出格式
一行,n个整数,表示序列a[i],如果答案不唯一,任意输出一种。
样例输入
7
1 2 3 2 4 4 3
样例输出
1 4 5 2 7 6 3
样例解释
以每个a[i]结尾的最长上升子序列分别为{1},{1,4},{1,4,5},{1,2},{1,4,5,7},{1,4,5,6},{1,2,3}
数据范围与约定
对于30%的数据,n<=10
对于另外40%的数据,n<=1000
对于所有数据,n<=100000
——————————————————————————————————————————
这道题当然可以按 长度 以及 位置的前后进行一波排序解决问题(长度从小到大 位置后(大)的在前)
这样复杂度是nlogn
所以我写的是拓扑排序(O(n))
我们枚举到一个数 向值比他小1的数连线 表示他比他大 1
同时向和他一样大的在他前一位的连线 因为这样大小关系一样是确定的
然后就一波拓扑排序解决问题辣
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int M=2e5+;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
bool f;
int T,n,k,last[M],ans[M];
int first[M],in[M],cnt;
struct node{int to,next;}e[*M];
void ins(int a,int b){e[++cnt]=(node){b,first[a]}; first[a]=cnt;}
std::queue<int>q;
int main(){
freopen("search.in","r",stdin);
freopen("search.out","w",stdout);
n=read();
for(int i=;i<=n;i++){
k=read();
if(k>&&!last[k-]) f=true;
if(last[k]) ins(i,last[k]),in[last[k]]++;
if(last[k-]) ins(last[k-],i),in[i]++;
last[k]=i;
}
int h=;
for(int i=;i<=n;i++) if(!in[i]) q.push(i),ans[i]=++h;
while(!q.empty()){
int x=q.front(); q.pop();
for(int i=first[x];i;i=e[i].next){
int now=e[i].to;
if(ans[now]) continue;
in[now]--;
if(!in[now]) q.push(now),ans[now]=++h;
}
}
for(int i=;i<=n;i++) printf("%d ",ans[i]); puts("");
return ;
}
汕头市队赛 SRM14 T2 最长上升子序列的更多相关文章
- 汕头市队赛 SRM1X T2 ——扫描线
绵津见-终 SRM 13 背景 “西瓜也是可以种在海上的!”——绵津见 然而种在海上的西瓜最需要防范的,是时不时会涌向瓜田的阵阵海浪. 幸好,身为海神的绵津见可以释放魔法“水平如镜”来阻止海浪拍打西瓜 ...
- 汕头市队赛 SRM16 T2
描述 猫和老鼠,看过吧?猫来了,老鼠要躲进洞里.在一条数轴上,一共有n个洞,位置分别在xi,能容纳vi只老鼠.一共有m只老鼠位置分别在Xi,要躲进洞里,问所有老鼠跑进洞里的距离总和最小是多少. 输入格 ...
- 汕头市队赛SRM14 T3覆盖
我们可以考虑两种情况 区间之间不相重叠 和 重叠 f[i][j]表示以当前最后一个区间以 i 结尾 并且选了 j 个区间 不相重叠的话 只要选 1-i-w 的max再加上 包含i在内的前四个数的和 相 ...
- 汕头市队赛 SRM14 T1 计算几何瞎暴力
计算几何瞎暴力 (easy.pas/c/cpp) 128MB 1s 在平面上,给定起点和终点,有一面墙(看作线段)不能穿过,问从起点走到终点的最短路程. 输入格式 输入一行,包含8个用空格分隔的整数x ...
- 汕头市队赛 SRM13 T2
这道题很容易想到是二分 但是因为可能会爆LL 所以要加一波特判 #include<cstdio> #include<cstring> #include<algorithm ...
- 汕头市队赛 C KMP codeforces B. Image Preview
汕头市队赛题目传送门 codeforces题目传送门 这道题我的做法是 尝试先往左走然后往右走 或者先往右走然后往左走 然后注意一下枚举顺序就okay啦 #include<cstdio> ...
- 汕头市队赛 SRM 07 D 天才麻将少女kpm
这道题放了很久还是回来补了 D 天才麻将少女KPM SRM 07 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂. KPM上周叒打了n场麻将,但她这次又没控分,而且 ...
- Rectangles(第七届ACM省赛原题+最长上升子序列)
题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1255 描述 Given N (4 <= N <= 100) rec ...
- 汕头市队赛SRM 20 T2不净的圣杯
不净的圣杯 SRM 20 背景 作为一张BUG级别的卡,官方打算把它修改得人畜无害一些…… 虽然名字还没想好,但是能力大概是对敌方所有单位造成d点伤害,d为自己牌组中所有卡的编号的最大公约数.这无疑是 ...
随机推荐
- eclipse引入jquery文件报错解决
以下内容是小编给大家带来的关于Eclipse引入jquery报错如何解决的全部叙述,具体内容如下所示: 第一步: 去除eclipse的JS验证: 将windows->preference-> ...
- C语言基础篇(三) 指针
导航: 1.指针 2. 数组 3. 结构体,共用体 4. 内存分布图 5. 段错误分析 ----->x<------------->x<---- ...
- Git的使用--将本地项目上传到Github
Git的使用--将本地项目上传到Github 感谢作者 --> 原文链接 很早之前就注册了Github,但对其使用一直懵懵懂懂,很不熟练.直到昨天做完百度前端技术学院的task,想把代码托管到G ...
- WPF系列教程——(一)仿TIM QQ界面 - 简书
原文:WPF系列教程--(一)仿TIM QQ界面 - 简书 TIM QQ 我们先来看一下TIM QQ长什么样,整体可以将界面分为三个部分 TIM QQ 1. 准备 阅读本文假设你已经有XAML布局的基 ...
- 【转】android makefile文件分析
Makefile的规则如下: target ... : prerequisites ... command ... ... target可以是一个目标文件,也可以是Object File(例如hell ...
- iOS 引用外部静态库(.a文件)时或打包.a时,Category方法无法调用。崩溃
我的这个是MJRefresh,学习打.a包Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: ...
- 剑指Offer - 九度1517 - 链表中倒数第k个结点
剑指Offer - 九度1517 - 链表中倒数第k个结点2013-11-30 02:57 题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含 ...
- typeAliasesPackage 配置
mybatis 的 xml 文件中需要写类的全限定名,较繁琐,可以配置自动扫描包路径给类配置别名,有两种配置方式. 方式一: mybatis-config.xml 中配置 <typeAliase ...
- Java访问修饰符(控制属性或方法在哪些范围内可见)
default:不加控制符的时候,就是default,只能在本包内访问 public:公有的,在本类之外其他类中可以访问,不在本包内也可以访问 private:私有的,在本类之外其他类不能访问 pro ...
- 孤荷凌寒自学python第二十六天python的time模块的相关方法
孤荷凌寒自学python第二十六天python的time模块的相关方法 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 要使用time模块的相关方法,必须在文件顶端引用: import tim ...