【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的所有方方面面,比 ...
随机推荐
- 八、Docker+RabbitMQ
原文:八.Docker+RabbitMQ 一.下载镜像 docker pull rabbitmq:management 二.运行 docker run -d --name rabbitmq -e TZ ...
- 阅读笔记——Servlet
什么是Servlet Servlet是用java编写的运行在web服务器中的程序,因此它可以调用服务器端的类,它也可以被调用,它本身就是一个类. Servlet的工作原理 servlet由web服务器 ...
- oracle 日期
http://blog.itpub.net/126211/viewspace-712986/
- 【软件project】机房收费系统之图形回想
[背景]通过一阶段的学习.自己整理了整理机房收费系统.以下想通过几张图来回顾一下机房的总体流程.此图形仅仅代表鄙人现阶段的理解.本文仅供參考,若有不妥的地方,请积极指正. 1.机房收费系统业务流程图 ...
- Fragment 实现的 分类 效果
Fragment 实现的 分类 效果 布局文件的信息: <LinearLayout xmlns:android="http://schemas.android.com/apk/re ...
- Mongodb总结5-通过装饰模式,用Mongodb解决Hbase的不稳定问题
最近继续学习Mongodb的根本原因,是为了解决今天的问题.项目中用到了Hbase,生产环境服务器用了3台,但是不够稳定,每2天左右,就连不上了.重启就好了,当然,这是一个历史遗留问题.我在想,是不是 ...
- BlobTracker
Blob分析介绍 分类: CV相关2012-11-04 11:25 1929人阅读 评论(5) 收藏 举报 Blob翻译成中文,是“一滴”,“一抹”,“一团”,“弄脏”,“弄错”的意思.在计算机视觉中 ...
- linux cmd cp -a
cp -a 在保留原文件属性的前提下复制文件 cp -r dirname destdir 复制目录后其文件属性会发生变化 想要使得复制之后的目录和原目录完全一样,可以使用cp -a dirn ...
- Android Studio插件推荐-GsonFormat,ButterKnifeZelezny
原创文章.转载请注明 http://blog.csdn.net/leejizhou/article/details/50557786 本篇介绍的仅仅适用android studio和 Intellij ...
- memcached缓存分布式部署方案
一.分布式方案介绍 比较流行的两种方案: 1.取余分布: 计算key的哈希值,与服务器数量取余,得到目标服务器.优点:实现简单,当某台服务器不可用时,故障转移方便:缺点:当增减服务器时, Key与服务 ...