【HDU5748】Bellovin
Description











andhe define a function on the sequence --





























,where

isthe length of the longest increasing subsequence ending with

. Peter would like to find another sequence











insuch a manner that














equalsto














.Among all the possible sequences consisting of only positive integers, Peter wants the lexicographically smallest one.
The sequence











islexicographically smaller than sequence











,if there is such number
from
to
,that




for 



and 



.Input
,indicating the number of test cases. For each test case:
The first contains an integer











--the length of the sequence. The second line contains
integers 



















.Output
integers 


















denotingthe lexicographically smallest sequence.
Sample Input
3
1
10
5
5 4 3 2 1
3
1 3 5
Sample Output
1
1 1 1 1 1
1 2 3
【题解】
这题就是要求最长不下降子序列。
不同的是,它不是要求你求出来最长不下降子序列的各个值具体是什么。
它要求的是以ai结尾的最长不下降子序列的长度f[i].
但是这题的坑点在于。它不让你用那么方便的n^2算法。要用nlogn算法才行。所以就去找咯。
原来的f[i]要改一下意思了。变成长度为i的最长上升(严格上升)序列的最后一个元素的最小值是啥。
一开始len = 1;f[1] = a1;
然后for i = 2->n
if (a[i] > f[len]) //这个很好理解吧?就是如果大于长度为len的最后一个元素.则最长XX的长度递增。
{
len++;
f[len] = a[i]; //然后把新的元素接上去就好
直接输出len.表示以a[i]结尾的最长不下降子序列的长度为len;
}
else
{
找到一个k
f[k-1]<a[i]<=f[k];
因为a[i] <= f[k]且f[k-1]<a[i] 则说明其可以代替f[k]成为一个更小的f[k]'。
那么就让f[k] = a[i]就好;
这个k可以用二分查找找到(鬼才想去写这个二分查找。跟屎一样难写!)
所以我们用STL解决(就是algorithm这个头文件里的东西。)
它叫。我看下我能不能默下来lower__count??
我看下。
哦,错了
是lower_bound(f+1,f+1+len,a[i])-f;
你没看错最后面减去了一个数组
然后前面就是类似sort(a+1,a+1+len);
表示从1..len找到这样的k;
然后f[k] = a[i];
然后输出k.表示以a[i]为结尾的最长不下降子序列的长度为k;
}
【代码】
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std; int t, n, a[100001], f[100001], last = 1, ans[100001]; int main()
{
scanf("%d", &t);
for (int mm = 1; mm <= t; mm++)
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)//读入数据
scanf("%d", &a[i]);
f[1] = a[1];//最长不下降子序列长度为1的最小结尾元素一开始就是a[1]
ans[1] = 1;//没用的。。别管
printf("1");//表示以a1为结尾的最长不下降子序列的长度为1
last = 1;
for (int i = 2; i <= n; i++)
{
if (f[last] < a[i])//因为更新了最长不下降子序列的长度
{
last++;
printf(" %d", last);//所以以其结尾的元素的长度为last;
f[last] = a[i];
}
else
{
int pos = lower_bound(f + 1, f + 1 + last, a[i]) - f;//找到合适的K值
f[pos] = a[i];//放在这个位置
printf(" %d", pos);//输出它的长度、即以a[i]为结尾的最长不下降子序列的长度。
}
}
printf("\n");
}
return 0;
}
【HDU5748】Bellovin的更多相关文章
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- Python高手之路【一】初识python
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
随机推荐
- 洛谷 P1303 A*B Problem
P1303 A*B Problem 题目描述 求两数的积. 输入输出格式 输入格式: 两行,两个数. 输出格式: 积 输入输出样例 输入样例#1: 复制 1 2 输出样例#1: 复制 2 说明 每个数 ...
- get_browser()用法
get_browser()用法 get_browser()函数是用来分析USER_AGENT的,它的执行方法是自动获取客户端的USER_AGENT,然后调用browscap.ini库进行分析得到结果 ...
- Android判断App是否在前台运行
版权声明:本文为博主原创文章,未经博主允许不得转载. //当前应用是否处于前台 private boolean isForeground(Context context) { if (context ...
- amazeui学习笔记一(开始使用2)--布局示例layouts
amazeui学习笔记一(开始使用2)--布局示例layouts 一.总结 1.样例分析(不要忘记,优先分析这个布局示例):有教你页面怎么布局的,实例中可以分析一波 2.响应式:对应meta标签中的v ...
- 关于C++中的内存泄露
1.c++内存泄漏的定义: 内存泄漏(memory leak)是指由于疏忽或错误造成了程序未能释放掉不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失 ...
- 获取input file 选中的图片,并在一个div的img里面赋值src实现预览
代码如下利用html5实现:几乎兼容所有主流浏览器,当然IE必须是IE 6以上 [jquery代码] $(function() { $("#file_upload").change ...
- JAVA 水题
纯粹是让我来掌握熟练度的. 1.金蝉素数 某古寺的一块石碑上依稀刻有一些神秘的自然数. 专家研究发现:这些数是由1,3,5,7,9 这5 个奇数字排列组成的5 位素数,且同时去掉它的最高位与最低位数字 ...
- 洛谷 P1510 精卫填海
洛谷 P1510 精卫填海 题目描述 [版权说明] 本题为改编题. [问题描述] 发鸠之山,其上多柘木.有鸟焉,其状如乌,文首,白喙,赤足,名曰精卫,其名自詨.是炎帝之少女,名曰女娃.女娃游于东海,溺 ...
- iOS_04_数据类型、常量、变量
一.数据 1.什么是数据 * 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据,图片数据,视频数据,还有聊天QQ产生的文 ...
- 微服务实战(六):选择微服务部署策略 - DockOne.io
原文:微服务实战(六):选择微服务部署策略 - DockOne.io [编者的话]这篇博客是用微服务建应用的第六篇,第一篇介绍了微服务架构模板,并且讨论了使用微服务的优缺点.随后的文章讨论了微服务不同 ...