hdu-5748 Bellovin(LIS)
2016-07-23 23:59
260 查看
题目链接:
Memory Limit: 131072/131072 K (Java/Others)
[align=left]Problem Description[/align]
Peter has a sequence a1,a2,...,an and he define a function on the sequence -- F(a1,a2,...,an)=(f1,f2,...,fn), where fi is the length of the longest increasing subsequence ending with ai.
Peter would like to find another sequence b1,b2,...,bn in such a manner that F(a1,a2,...,an) equals to F(b1,b2,...,bn). Among all the possible sequences consisting of only positive integers, Peter wants the lexicographically smallest one.
The sequence a1,a2,...,an is lexicographically smaller than sequence b1,b2,...,bn, if there is such number i from 1 to n, that ak=bk for 1≤k<i and ai<bi.
[align=left]Input[/align]
There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case:
The first contains an integer n (1≤n≤100000) -- the length of the sequence. The second line contains n integers a1,a2,...,an (1≤ai≤109).
[align=left]Output[/align]
For each test case, output n integers b1,b2,...,bn (1≤bi≤109) denoting the lexicographically smallest sequence.
[align=left]Sample Input[/align]
3
1
10
5
5 4 3 2 1
3
1 3 5
[align=left]Sample Output[/align]
1
1 1 1 1 1
1 2 3
题意:
给一个序列,求出每个位置结尾的最长上升子序列;然后找一个字典序最小的这个函数值相同的子序列;
思路:
求完这个函数值后这个函数值就是这个字典序最小的序列了;
AC代码:
Bellovin
Time Limit: 6000/3000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)
[align=left]Problem Description[/align]
Peter has a sequence a1,a2,...,an and he define a function on the sequence -- F(a1,a2,...,an)=(f1,f2,...,fn), where fi is the length of the longest increasing subsequence ending with ai.
Peter would like to find another sequence b1,b2,...,bn in such a manner that F(a1,a2,...,an) equals to F(b1,b2,...,bn). Among all the possible sequences consisting of only positive integers, Peter wants the lexicographically smallest one.
The sequence a1,a2,...,an is lexicographically smaller than sequence b1,b2,...,bn, if there is such number i from 1 to n, that ak=bk for 1≤k<i and ai<bi.
[align=left]Input[/align]
There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case:
The first contains an integer n (1≤n≤100000) -- the length of the sequence. The second line contains n integers a1,a2,...,an (1≤ai≤109).
[align=left]Output[/align]
For each test case, output n integers b1,b2,...,bn (1≤bi≤109) denoting the lexicographically smallest sequence.
[align=left]Sample Input[/align]
3
1
10
5
5 4 3 2 1
3
1 3 5
[align=left]Sample Output[/align]
1
1 1 1 1 1
1 2 3
题意:
给一个序列,求出每个位置结尾的最长上升子序列;然后找一个字典序最小的这个函数值相同的子序列;
思路:
求完这个函数值后这个函数值就是这个字典序最小的序列了;
AC代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> //#include <bits/stdc++.h> #include <stack> using namespace std; #define For(i,j,n) for(int i=j;i<=n;i++) #define mst(ss,b) memset(ss,b,sizeof(ss)); typedef long long LL; template<class T> void read(T&num) { char CH; bool F=false; for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar()); for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar()); F && (num=-num); } int stk[70], tp; template<class T> inline void print(T p) { if(!p) { puts("0"); return; } while(p) stk[++ tp] = p%10, p/=10; while(tp) putchar(stk[tp--] + '0'); putchar('\n'); } const LL mod=1e9+7; const double PI=acos(-1.0); const int inf=1e9; const int N=1e5+10; const int maxn=500+10; const double eps=1e-8; int a ,d ,g ; int main() { int t; read(t); while(t--) { int n; read(n); For(i,1,n)read(a[i]); for(int i=1;i<=n;i++)g[i]=inf; for(int i=1;i<=n;i++) { int k=lower_bound(g+1,g+n+1,a[i])-g; d[i]=k; g[k]=a[i]; } for(int i=1;i<n;i++)printf("%d ",d[i]);printf("%d\n",d ); } return 0; }
相关文章推荐
- (12)HTML标签详解之<base />
- c++中const的作用
- linux下的几个查找命令的区别
- ABCTF-2016-部分题解
- 码神学习作业(if语句)
- 关于视图生命周期的问题
- curl命令详解
- android获取状态栏高度
- ---简单的mvc模式理解案例
- “城市民族工作条例”详解--建议废止
- JQuery Ajax提交form工具类
- Socket —— 通过多线程简单模拟了聊天室
- CSU-ACM2016暑假集训训练1-二分搜索-C
- 【Leetcode】之Subset II
- springMVC学习笔记--知识点总结1
- 垂直进度条VerticalSeekBar
- 编码规范(华为)
- 在Netbeans和Eclipse上搭建Android开发环境教程
- 复杂链表的复制
- noi day1 前的晚上