现在给你一个长度为n的整数序列,其中有一些数已经模糊不清了,现在请你任意确定这些整数的值,
使得最长上升子序列最长。(为何最长呢?因为hxy向来对自己的rp很有信心)
 

Input

第一行一个正整数n
接下来n行第i行格式如下
     K x:表示第i个数可以辨认且这个数为x
     N:表示第i个数一个已经辨认不清了
(n<=100000,|x|<=10^9)
 

Output

一个正整数代表最长上升子序列最长是多少
 

Sample Input

4
K 1
N
K 2
K 3

Sample Output

3

题意:有一个序列,有些位置的数由你来决定,求LIS。

思路:首先我们知道求LIS可以用二分来优化,那么我们维护一个上升的序列,用dp[i]表示长度为i的LIS的最后一位最小是多少,每次新加入一个数的时候,用x去替换upper_bound的位置即可。

然而这个题有未知数,未知数可以由自己决定,所以每个未知数都要使用比较优,对于每个dp[i],可以用dp[i]+1去更新dp[i+1],即右移一位,我们用add来表示。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int dp[maxn],add;
int main()
{
dp[]=-(1e9+);
int N,x,R=; char c[];
scanf("%d",&N);
rep(i,,N){
scanf("%s",c+);
if(c[]=='K'){
scanf("%d",&x);
int l=,r=R,pos,mid;
while(l<=r){
mid=(l+r)>>;
if(dp[mid]+add<x) { l=mid+; pos=mid;}
else r=mid-;
}
if(pos==R) dp[++R]=x-add;
else dp[pos+]=min(dp[pos+],x-add);
}
else add++;
}
printf("%d\n",R+add);
return ;
}

BZOJ - 5427:最长上升子序列 (二分&思维)的更多相关文章

  1. BZOJ 5427: 最长上升子序列

    $f[i] 表示长度为i的最长上升子序列的最后一位的最小值是多少$ 对于普通的$LIS我们可以二分确定位置去更新$ 再来考虑对于这个,如果有某一位没有确定的话 那么这一位是可以随便取的,也就是说,所有 ...

  2. BZOJ 3173 最长上升子序列(树状数组+二分+线段树)

    给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? 由于序列是顺序插入的,所以当前插入的数字对之 ...

  3. BZOJ.3591.最长上升子序列(状压DP)

    BZOJ 题意:给出\(1\sim n\)的一个排列的一个最长上升子序列,求原排列可能的种类数. \(n\leq 15\). \(n\)很小,参照HDU 4352这道题,我们直接把求\(LIS\)时的 ...

  4. [程序员代码面试指南]最长递增子序列(二分,DP)

    题目 例:arr=[2,1,5,3,6,4,8,9,7] ,最长递增子序列为1,3,4,8,9 题解 step1:找最长连续子序列长度 dp[]存以arr[i]结尾的情况下,arr[0..i]中的最长 ...

  5. BZOJ 2423 最长公共子序列

    Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0, ...

  6. 【刷题】BZOJ 3591 最长上升子序列

    Description 给出1~n的一个排列的一个最长上升子序列,求原排列可能的种类数. Input 第一行一个整数n. 第二行一个整数k,表示最长上升子序列的长度. 第三行k个整数,表示这个最长上升 ...

  7. bzoj 3173 最长上升子序列

    Written with StackEdit. Description 给定一个序列,初始为空.现在我们将\(1\)到\(N\)的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字, ...

  8. 二分求最长上升子序列 二分LIS

    #include <iostream> #include <cstring> #define N 50010 using namespace std; int n; int n ...

  9. BZOJ 5161: 最长上升子序列 状压dp+查分

    好神啊 ~ 打表程序: #include <cstdio> #include <cstring> #include <algorithm> #define N 14 ...

  10. HDOJ1025(最长上升子序列)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

随机推荐

  1. 图像运动去模糊(Motion Deblurring)代码

    http://blog.csdn.net/qianliheshan/article/details/12853157 http://www.di.ens.fr/~whyte/ Efficient De ...

  2. Apache 工作模式详解

    Apache 工作模式详解 Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM).在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择, ...

  3. 仿京东Tab商品切换

    在线演示 本地下载

  4. java的null

    null表示没有地址,它可以赋值给引用变量,但不能将null赋给基本类型变量,例如int.double.float.boolean

  5. 8月份的To-Do List

    1.汲取归纳<Effective Objective-C 2.0 >的知识点 2.回顾网易云课堂翁恺老师的C语言相关课程, 为学习算法做好准备 3.读完Kelly McGonigal的&l ...

  6. C++命名(自定义)

    1.自定义函数 void GetName(): 2.布尔型变量 BOOL ISOPEN:

  7. Difference between RouteTable.Routes and HttpConfiguration.Routes?

    https://stackoverflow.com/questions/12533782/difference-between-routetable-routes-and-httpconfigurat ...

  8. JDK环境变量配置问题 - 原创

    一台电脑上同时装有jdk1.7和jdk1.8,切换jdk时的报错问题 示例如下环境变量: JAVA_HOME       C:\Program Files (x86)\Java\jdk1.7 CLAS ...

  9. geoserver源码学习与扩展——CSV转shapefile文件

    基于geotools实现csv转换为shapefile文件. 1.读取CSV文件,将其装入FeatureCollection: 2.利用ShapefileDumper类将FeatureCollecti ...

  10. win7 vmware虚拟机上网设置

    1.上网方式设成HOST-ONLY 2.将主机的网络共享VMnet1(完成第一步设置后,VMware自动分配虚拟网络VMnet1) 3.win7下查看VMnet1网络ip 4.根据3查看的IP地址在v ...