现在给你一个长度为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. POJ - 2289 Jamie's Contact Groups (二分图多重匹配)

    题意:N个人,M个团体.每个人有属于自己的一些团体编号.将每个人分配到自己属于的团体中,问这个人数最多的团体其人数最小值是多少. 分析:一个一对多的二分图匹配,且是最大值最小化问题.二分图的多重匹配建 ...

  2. SQL server 数据库 操作及简单查询

    使用SQL Sever语言进行数据库的操作 常用关键字identity 自增长primary key 主键unique 唯一键not null 非空references 外键(引用) 在使用查询操作数 ...

  3. HDFS 详解

    HDFS 概述 基于2.7.3 HDFS 优点: 1.高容错性 数据自动保存多个副本,默认是三个副本 副本丢失后,会自动恢复 2.适合批处理 移动计算而非移动数据,批处理的时候,数据量很大,移动数据是 ...

  4. Javascript何时执行

    分以下两种情况: 1.HTML head部分的Javascript会在被调用的时候执行 需要调用才执行的脚本或事件触发执行的脚本放在head部分,这可以保证脚本在任何调用之前被预先加载,在页面加载完之 ...

  5. 黑苹果Yosemite 10.10.1 修改wowpc.iso文件免选择直接启动Mac系统

    安装教程见: http://www.cnblogs.com/zouzf/p/4356641.html 网上很多教程都是OK的,但每个人的具体情况不同就可能有一些细节问题搞死你1.本文所指的 wowpc ...

  6. ReactNative之Android打包APK方法(趟坑过程)

    欢迎大家加群讨论 点击链接加入群[ReactNative-解决问题交流群] :644124441 点击链接加入群[ReactNative技术交流群2] :687663534 多余的不解释了.直接上车吧 ...

  7. 用adb 启动camera

    adb shell am start -a android.media.action.STILL_IMAGE_CAMERA  启动camera adb shell input keyevent 27 ...

  8. 分布式技术 webapi

    webapi可以返回json.xml类型的数据,对于数据的增.删.改.成,提供对应的资源操作,按照请求的类型进行相应的处理,主要包括 Get(查).Post(增).Put(改).Delete(删),这 ...

  9. java中HashMap集合的常用方法

    public Object clone() 返回hashMap集合的副本 其余的方法都是实现Map集合的 https://www.cnblogs.com/xiaostudy/p/9510763.htm ...

  10. 多线程-闭锁CountDownLatch

    闭锁相当于相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关着的,所有的线程都不可以通过.它可以使一个或者一组线程等待某个时间发生.闭锁状态包括一个计数器,初始化的时候传入一个正数,这个数字表示等待 ...