cojs1101. [Vijos1369] 难解的问题==codevs 2188 最长上升子序列
【题目描述】
在你的帮助下,蔚蓝来到了埃及.在金字塔里,蔚蓝看到了一个问题,传说,能回答出这个问题的人就能受到埃及法老的祝福,可是蔚蓝日夜奋战,还是想不出来,你能帮帮他么?(XXX: 胡扯,教主怎么可能想不出来= _ =||)(WS这人说的=。=)
问题是这样的:
给定一个序列<a1,a2,...,an>.求最长上升子序列(lis)p1<p2<...<pw满足a[p1]<a[p2]<...<a[pw]
例如65 158 170 299 300 155 207 389
LIS=<65,158,170,299,300,389>。
但是,现在还有一个附加条件:求出的最长上升子序列必须含有第K项。
比如,在上面的例子中,要求求出的最长上升子序列必须含有第6项,那么最长上升子序列就是:65 155 207 389。
【输入格式】
第一行是用空格隔开的两个正整数N、K,含义同上所述.
第二行N个数,即给出的序列.
【输出格式】
仅有一个数,表示含有第K项的最长上升子序列的长度.
【样例输入1】
5 3
1 2 3 2 1
【样例输出1】
3
8 6
65 158 170 299 300 155 207 389
4
【提示】
对于60%的数据,N<=10000;
对于100%的数据,1<=n<=300000 ,1<=k<=n,序列的每一个数为小于2^31-1 的非负整数.
【来源】
Super Pig(蔚蓝) http://vijos.org/Problem_show.asp?id=1369
题解:
很简单,只需把a[k]前面比a[k]大、后面比a[k]小的数剔除掉,生成新的a数组。
nlogn的算法求一下 新的a数组 的最长上升子序列。
AC代码:
#include<cstdio>
#include<iostream>
using namespace std;
#define N 1000010
int T,n,k,len,a[N],b[N],c[N];
inline int binary_search(int i){
int l=,r=len,mid;
while(l<r){
mid=l+(r-l>>);
if(b[mid]>=a[i]) r=mid;
else l=mid+;
}
return l;
}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++) scanf("%d",a+i);
int count=;
for(int i=;i<k;i++) if(a[i]<a[k]) c[++count]=a[i];c[++count]=a[k];
for(int i=k+;i<=n;i++) if(a[k]<a[i]) c[++count]=a[i];
for(int i=;i<=n;i++) a[i]=c[i];
b[len=]=a[];
for(int i=;i<=count;i++){
if(a[i]>b[len]){
b[++len]=a[i];
}
else{
int pos=binary_search(i);
//int pos=lower_bound(b,b+len+1,a[i])-b;
b[pos]=a[i];
}
}
printf("%d\n",len);
return ;
}
cojs1101. [Vijos1369] 难解的问题==codevs 2188 最长上升子序列的更多相关文章
- Codevs 2188 最长上升子序列(变式)
2188 最长上升子序列 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description LIS问题是最经典的动态规划基础问题之一.如果要求一个 ...
- codevs 2188 最长上升子序列
题目描述 Description LIS问题是最经典的动态规划基础问题之一.如果要求一个满足一定条件的最长上升子序列,你还能解决吗? 给出一个长度为N整数序列,请求出它的包含第K个元素的最长上升子序列 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- Python-求解两个字符串的最长公共子序列
一.问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符串1:BDCABA:字符串2:ABCBDAB.则这两个字符串的最长公共子序列长 ...
- vijos1369:难解的问题
描述 在你的帮助下,蔚蓝来到了埃及.在金字塔里,蔚蓝看到了一个问题,传说,能回答出这个问题的人就能受到埃及法老的祝福,可是蔚蓝日夜奋战,还是想不出来,你能帮帮他么?(XXX: 胡扯,教主怎么可能想不出 ...
- codevs 1862 最长公共子序列(求最长公共子序列长度并统计最长公共子序列的个数)
题目描述 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y ...
- codevs 2185 最长公共上升子序列
题目链接: codevs 2185 最长公共上升子序列codevs 1408 最长公共子序列 题目描述 Description熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目.小沐沐先让奶牛研究了最长上升 ...
- O2O难解餐饮行业趋势下行之困
近几年,O2O这个名词越来越常见,我们不但能够在IT相关资讯栏目看到它的存在,甚至在一些综合新闻版面也能轻易看到. 诚然.线下商家结合线上引流这样的方法,能够带来不少订单,可是O2O是否就能够解决餐饮 ...
- 最难解的耦合 — James
最近好久没写博客,因为换工作原因,从传统企业转行到互联网行业,这次换工作成本很大! 新公司,纯互联网广告公司,BI驱动,出来几日感觉成长空间很大,下面来些干货. 什么是程序.软件 程序 = 数据结构 ...
随机推荐
- ERwin逻辑模型
1.自动排序 Format>>Preferences>>Layout Entire Diagram CA ERwin
- HDU_1011_Starship Troopers_树型dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 Starship Troopers Time Limit: 10000/5000 MS (Jav ...
- 浅谈:nodejs在cmd提示不是内部或外部命令
今天用cmd安装个库,结果发现node不是内部命令,检查后发现上次重装nodejs换了个安装位置,path环境变量忘改了. 找到变量值中node的安装地址,比如C:develop\nodejs,如果不 ...
- 让浏览器不再显示 https 页面中的 http 请求警报<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" ...
- python logger日志
直接上代码 import logging import logging.handlers import datetime import time import threading from conf. ...
- c++通过CMake实现debug开关
刚学cmake,很多东西还不是很懂,不过今天刚刚实现了通过CMake控制debug的开关,兴奋之余记录一下. 背景介绍: 最近参与到了一个大的C++项目,很多代码已经非常成熟,我来添加一些辅助功能,但 ...
- 我的第一个随笔——MarkDown的简单用法!
目录 我的第一个笔记 1. 学习简单的markdown语法 1.1 标题 1.2 引用 1.3 倾斜与加粗 1.4无序列表 1.5有序列表 1.6图片和网页 1.7分割线 1.8代码块 1.9结尾 2 ...
- Linux:SAMBA共享、NFS共享、Autofs自动挂载
SAMBA.NFS共享区别 NFS开源文件共享程序:NFS(NetworkFile System)是一个能够将多台Linux的远程主机数据挂载到本地目录的服务,属于轻量级的文件共享服务,不支持Linu ...
- python 配置文件 ConfigParser模块
ConfigParser模块 用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser. 来看一个好多软件的常见文档格式如下 [DEFAULT] Se ...
- Codeforces 989C - A Mist of Florescence
传送门:http://codeforces.com/contest/989/problem/C 这是一个构造问题. 构造一张网格,网格中的字符为’A’.’B’.’C’.’D’,并且其连通块的个数分别为 ...