hdu 5748

Peter有一个序列a1,a2,...,ana_1,a_2,...,a_na​1​​,a​2​​,...,a​n​​. 定义F(a1,a2,...,an)=(f1,f2,...,fn)F(a_1,a_2,...,a_n)=(f_1,f_2,...,f_n)F(a​1​​,a​2​​,...,a​n​​)=(f​1​​,f​2​​,...,f​n​​), 其中fif_if​i​​是以aia_ia​i​​结尾的最长上升子序列的长度.

Peter想要找到另一个序列b1,b2,...,bnb_1,b_2,...,b_nb​1​​,b​2​​,...,b​n​​使得F(a1,a2,...,an)F(a_1,a_2,...,a_n)F(a​1​​,a​2​​,...,a​n​​)和F(b1,b2,...,bn)F(b_1,b_2,...,b_n)F(b​1​​,b​2​​,...,b​n​​)相同. 对于所有可行的正整数序列, Peter想要那个字典序最小的序列.

序列a1,a2,...,ana_1, a_2, ..., a_na​1​​,a​2​​,...,a​n​​比b1,b2,...,bnb_1, b_2, ..., b_nb​1​​,b​2​​,...,b​n​​字典序小, 当且仅当存在一个正整数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_ka​k​​=b​k​​并且ai<bia_i < b_ia​i​​<b​i​​.
输入描述
输入包含多组数据, 第一行包含一个整数TTT表示测试数据组数. 对于每组数据:

第一行包含一个整数nnn (1≤n≤100000)(1 \le n \le 100000)(1≤n≤100000)表示序列的长度. 第二行包含nnn个整数a1,a2,...,ana_1,a_2,...,a_na​1​​,a​2​​,...,a​n​​ (1≤ai≤109)(1 \le a_i \le 10^9)(1≤a​i​​≤10​9​​).
输出描述
对于每组数据, 输出nnn个整数b1,b2,...,bnb_1,b_2,...,b_nb​1​​,b​2​​,...,b​n​​ (1≤bi≤109)(1 \le b_i \le 10^9)(1≤b​i​​≤10​9​​)表示那个字典序最小的序列.
输入样例
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的更多相关文章

  1. hdu 5748(LIS)

    Bellovin Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  2. hdu 5748 Bellovin【最长上升子序列】

    题目链接:https://vjudge.net/contest/148584#problem/A 题目大意: 解题思路:题目要求为:输出与已知序列的每一个元素的f(i)(f(i)的定义如题)相同的字典 ...

  3. hdu 5748(求解最长上升子序列的两种O(nlogn)姿势)

    Bellovin Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepte ...

  4. Super Jumping! Jumping! Jumping!(hdu 1087 LIS变形)

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  5. HDU 1025 LIS二分优化

    题目链接: acm.hdu.edu.cn/showproblem.php?pid=1025 Constructing Roads In JGShining's Kingdom Time Limit: ...

  6. HDU 1950(LIS)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1950 Bridging signals Time Limit: 5000/1000 MS (Java ...

  7. hdu 1087(LIS变形)

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  8. hdu 1025 lis 注意细节!!!【dp】

    感觉这道题浪费了我半个小时的生命......哇靠!原来输出里面当len=1时是road否则是roads!!! 其实做过hdu 1950就会发现这俩其实一样,就是求最长上升子序列.我用结构体记录要连线的 ...

  9. HDU 5748 最长上升子序列的长度nlogn(固定尾部)

    Bellovin Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

随机推荐

  1. 12 Linux下crontab详解

    1. 概述: crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进 ...

  2. bower安装使用入门详情

    bower安装使用入门详情   bower自定义安装:安装bower需要先安装node,npm,git全局安装bower,命令:npm install -g bower进入项目目录下,新建文件1.tx ...

  3. linux后台进程管理工具supervisor

    Linux的后台进程运行有好几种方法,例如nohup,screen等,但是,如果是一个服务程序,要可靠地在后台运行,我们就需要把它做成daemon,最好还能监控进程状态,在意外结束时能自动重启. su ...

  4. C语言面试题

    #include <stdio.h> int main() { ] = {, , , , }; ); // <==> (unsigned int)&a+sizeof(* ...

  5. 【php】assert函数的用法

    [php]assert函数的用法 http://www.douban.com/note/217557007/ 2012-06-01 10:32:37   assert这个函数在php语言中是用来判断一 ...

  6. Android软件更新安装。

    app的开发有一个问题是避免不了的,那就是软件的升级维护. 这里我在查过一些资料和写了一个升级帮助类.使用很方便.直接导入就可以了. ( VersionBean.class为更新地址返回的数据对象,我 ...

  7. MVC Actionlink 参数说明

    Html.ActionLink用于输出链接,以下是带参数的例子: @Html.ActionLink("编辑", "Edit", new {id= "1 ...

  8. Android开发--布局二

    1.Andrid:控件布局(表格布局)TableLayout 有多少个TableRow对象就有多少行, 列数等于最多子控件的TableRow的列数 直接在TableLayout加控件,控件会占据一行 ...

  9. 使用虚幻引擎中的C++导论(一-生成C++类)

    使用虚幻引擎中的C++导论(一) 第一,这篇是我翻译的虚幻4官网的新手编程教程,原文传送门,有的翻译不太好,但大体意思差不多,请支持我O(∩_∩)O谢谢. 第二,某些细节操作,这篇文章省略了,如果有不 ...

  10. 解决Django和EasyUI搭配使用时出现的CSRF问题

    在<head></head>中添加以下代码即可: <script type="text/javascript"> $.ajaxSetup({ d ...