BZOJ - 5427:最长上升子序列 (二分&思维)
Input
Output
Sample Input
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:最长上升子序列 (二分&思维)的更多相关文章
- BZOJ 5427: 最长上升子序列
		$f[i] 表示长度为i的最长上升子序列的最后一位的最小值是多少$ 对于普通的$LIS我们可以二分确定位置去更新$ 再来考虑对于这个,如果有某一位没有确定的话 那么这一位是可以随便取的,也就是说,所有 ... 
- BZOJ 3173 最长上升子序列(树状数组+二分+线段树)
		给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? 由于序列是顺序插入的,所以当前插入的数字对之 ... 
- BZOJ.3591.最长上升子序列(状压DP)
		BZOJ 题意:给出\(1\sim n\)的一个排列的一个最长上升子序列,求原排列可能的种类数. \(n\leq 15\). \(n\)很小,参照HDU 4352这道题,我们直接把求\(LIS\)时的 ... 
- [程序员代码面试指南]最长递增子序列(二分,DP)
		题目 例:arr=[2,1,5,3,6,4,8,9,7] ,最长递增子序列为1,3,4,8,9 题解 step1:找最长连续子序列长度 dp[]存以arr[i]结尾的情况下,arr[0..i]中的最长 ... 
- BZOJ 2423 最长公共子序列
		Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0, ... 
- 【刷题】BZOJ 3591 最长上升子序列
		Description 给出1~n的一个排列的一个最长上升子序列,求原排列可能的种类数. Input 第一行一个整数n. 第二行一个整数k,表示最长上升子序列的长度. 第三行k个整数,表示这个最长上升 ... 
- bzoj 3173 最长上升子序列
		Written with StackEdit. Description 给定一个序列,初始为空.现在我们将\(1\)到\(N\)的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字, ... 
- 二分求最长上升子序列   二分LIS
		#include <iostream> #include <cstring> #define N 50010 using namespace std; int n; int n ... 
- BZOJ 5161: 最长上升子序列 状压dp+查分
		好神啊 ~ 打表程序: #include <cstdio> #include <cstring> #include <algorithm> #define N 14 ... 
- HDOJ1025(最长上升子序列)
		Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ... 
随机推荐
- POJ - 2289 Jamie's Contact Groups (二分图多重匹配)
			题意:N个人,M个团体.每个人有属于自己的一些团体编号.将每个人分配到自己属于的团体中,问这个人数最多的团体其人数最小值是多少. 分析:一个一对多的二分图匹配,且是最大值最小化问题.二分图的多重匹配建 ... 
- html5 canvas js(数字时钟)
			<!doctype html> <html> <head> <title>canvas dClock</title> </head ... 
- Keepalived + Mysql 主主复制高可用
			环境 系统:Centos 7.4 x64 服务:Mariadb 5.5 .Keepalived 1.3.5.6 结构 主1:192.168.1.108 主2:192.168.1.109 VIP:19 ... 
- android timed gpio (linux 3.0.0) 受时钟控制的gpio【转】
			本文转载自:https://blog.csdn.net/linxi_hnh/article/details/8043417 1 路径: drivers/staging/android/timed_gp ... 
- 主机不能访问虚拟机web服务的问题
			虚拟机是CentOs 7 iptables -Fiptables -P INPUT ACCEPT 参考:http://blog.csdn.net/abnereel/article/details/41 ... 
- Android中获取屏幕高度和宽度
			有时我们需要获取当前屏幕的高度和宽度,只需要在一个Activity的onCreate()方法中写上如下代码即可: //定义DisplayMetrics 对象 DisplayMetrics metric ... 
- C++转C#函数事例
			using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ... 
- win7 vmware虚拟机上网设置
			1.上网方式设成HOST-ONLY 2.将主机的网络共享VMnet1(完成第一步设置后,VMware自动分配虚拟网络VMnet1) 3.win7下查看VMnet1网络ip 4.根据3查看的IP地址在v ... 
- Java实现简单网页抓取
			需求说明:使用Java抓取网页信息,并以字符串的形式返回. 使用Java代码实现: package net.ibuluo.spider.util; import java.io.IOException ... 
- activity启动模式之singleTop
			activity启动模式之singleTop 一.简介 二.设置方法 在AndroidManifest.xml中将要设置为singleTop启动模式的页面进行配置 <activity andro ... 
