hdu 5748(LIS) Bellovin
Peter有一个序列a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an. 定义F(a1,a2,...,an)=(f1,f2,...,fn)F(a_1,a_2,...,a_n)=(f_1,f_2,...,f_n)F(a1,a2,...,an)=(f1,f2,...,fn), 其中fif_ifi是以aia_iai结尾的最长上升子序列的长度. Peter想要找到另一个序列b1,b2,...,bnb_1,b_2,...,b_nb1,b2,...,bn使得F(a1,a2,...,an)F(a_1,a_2,...,a_n)F(a1,a2,...,an)和F(b1,b2,...,bn)F(b_1,b_2,...,b_n)F(b1,b2,...,bn)相同. 对于所有可行的正整数序列, Peter想要那个字典序最小的序列. 序列a1,a2,...,ana_1, a_2, ..., a_na1,a2,...,an比b1,b2,...,bnb_1, b_2, ..., b_nb1,b2,...,bn字典序小, 当且仅当存在一个正整数iii (1≤i≤n)(1 \le i \le n)(1≤i≤n)满足对于所有的kkk (1≤k<i)(1 \le k < i)(1≤k<i)都有ak=bka_k = b_kak=bk并且ai<bia_i < b_iai<bi.
输入包含多组数据, 第一行包含一个整数TTT表示测试数据组数. 对于每组数据: 第一行包含一个整数nnn (1≤n≤100000)(1 \le n \le 100000)(1≤n≤100000)表示序列的长度. 第二行包含nnn个整数a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an (1≤ai≤109)(1 \le a_i \le 10^9)(1≤ai≤109).
对于每组数据, 输出nnn个整数b1,b2,...,bnb_1,b_2,...,b_nb1,b2,...,bn (1≤bi≤109)(1 \le b_i \le 10^9)(1≤bi≤109)表示那个字典序最小的序列.
3
1
10
5
5 4 3 2 1
3
1 3 5
1
1 1 1 1 1
1 2 3 就是一个nlgn的求最长上升子序列,比赛的时候脑抽了写了半天线段树
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int M = 1e5 + ;
int a[M],b[M],c[M],cas; int judge(int x)
{
int l=,r=cas,ans=;
while (l<=r)
{
int mid=(l+r)/;
if (c[mid]>x) r=mid-,ans=mid;
else if (c[mid]<x) l=mid+;
else return mid;
}
return ans;
} int main()
{
int t,n;
scanf("%d",&t);
while (t--){
scanf("%d",&n);
for (int i= ; i<=n ; i++) scanf("%d",&a[i]);
c[]=a[];b[]=;cas=;
for (int i= ; i<=n ; i++){
if (a[i]<c[]) c[]=a[i],b[i]=;
else if (a[i]>c[cas]) c[++cas]=a[i],b[i]=cas;
else { b[i]=judge(a[i]);c[b[i]]=a[i];}
}
for (int i= ; i<n ; i++)
printf("%d ",b[i]);
printf("%d\n",b[n]);
} return ;
}
hdu 5748(LIS) Bellovin的更多相关文章
- hdu 5748(LIS)
Bellovin Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- hdu 5748 Bellovin【最长上升子序列】
题目链接:https://vjudge.net/contest/148584#problem/A 题目大意: 解题思路:题目要求为:输出与已知序列的每一个元素的f(i)(f(i)的定义如题)相同的字典 ...
- hdu 5748(求解最长上升子序列的两种O(nlogn)姿势)
Bellovin Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepte ...
- Super Jumping! Jumping! Jumping!(hdu 1087 LIS变形)
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- HDU 1025 LIS二分优化
题目链接: acm.hdu.edu.cn/showproblem.php?pid=1025 Constructing Roads In JGShining's Kingdom Time Limit: ...
- HDU 1950(LIS)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1950 Bridging signals Time Limit: 5000/1000 MS (Java ...
- hdu 1087(LIS变形)
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- hdu 1025 lis 注意细节!!!【dp】
感觉这道题浪费了我半个小时的生命......哇靠!原来输出里面当len=1时是road否则是roads!!! 其实做过hdu 1950就会发现这俩其实一样,就是求最长上升子序列.我用结构体记录要连线的 ...
- HDU 5748 最长上升子序列的长度nlogn(固定尾部)
Bellovin Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
随机推荐
- Autocad 常用命令
一律使用的简写 1:将多条线段合并成一条多线段[pe] 2:如果发现合并的多线段将自己不想合并的区域合并进去了,别担心,炸开就行了 [x] 3:如果画的线段太长工作区不适应,使用缩放命令.[scale ...
- MapReduce编程job概念原理
在Hadoop中,每个MapReduce任务都被初始化为一个job,每个job又可分为两个阶段:map阶段和reduce阶段.这两个阶段分别用两个函数来表示.Map函数接收一个<key,valu ...
- ADF_Database Develop系列3_设计数据库表之Reconcile Database/Reverse Objects
2013-05-01 Created By BaoXinjian
- Atcoder CODE FESTIVAL 2016 qual C 的E题 Encyclopedia of Permutations
题意: 对于一个长度为n的排列P,如果P在所有长度为n的排列中,按照字典序排列后,在第s位,则P的value为s 现在给出一个长度为n的排列P,P有一些位置确定了,另外一些位置为0,表示不确定. 现在 ...
- HttpURLConnection 直接发送soap消息调用webservice
httpConn = (HttpURLConnection) new URL(urlString).openConnection(); httpConn.setRequestProperty(& ...
- (整理)SQLServer_DBA 工具
本文是SQLserver DBA 相关工具使用资料链接整理. SQLServer DBA 十大工具:http://www.cnblogs.com/fygh/archive/2012/04/25/246 ...
- GTD一些问题
一."大局"与事物的本质1,在处理每天.每小时的事务时,有很多干扰因素分散了我们的注意力,以致我们无法集中足够的精力关注更重要的问题.2,一种下意识的抵触情绪,在面对那些原本棘手的 ...
- FIO使用指南
前言 fio是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, nul ...
- sql日期函数操作
sql语句获取本周.本月.本年数据 SQL Serverselect * from [data] where DATEPART(m,[date])=2 Accessselect * from [da ...
- oracle分配权限:一个用户访问另一个用户的表
相当于alias(别名),比如把user1.table1在user2中建一个同义词table1 create synonym table1 for user1.table1; 这样当你在user2中查 ...