题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5427

  因为noip,博客咕了好久,这几天集中填一下坑。

  这题我们可以假设往不确定的空位里填数,然后考虑一下如何尽可能让空位多被选上。我们发现,如果有一个空位没在最后的最长上升子序列里,那么可以贪心地去掉一个被选上的数再加上去。

  那么我们假定所有的空位都被选上。这样原序列就被划分成了许多段,而每一段内的在最长上升子序列里的数都必须与两边相差至少2(留一个数给空位)。那么我们可以把每一段数整体减去前面空位的数量(即每个数的数值减去前面没被确定的数的个数),然后直接跑一遍最长上升子序列,加上空位数量就行了。

  代码:

#include<cstdio>
#include<set>
using namespace std;
inline char nc(){static char buf[100000],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read(){int tmp=0; char c=nc(),f=1; for(;c<'0'||'9'<c;c=nc())if(c=='-')f=-1; for(;'0'<=c&&c<='9';c=nc())tmp=(tmp<<3)+(tmp<<1)+c-'0'; return tmp*f;}
set<int>st;
int n,k,delta=0;
int main()
{n=read();for(int i=1;i<=n;i++){char ch=nc();while(ch<'A'||'Z'<ch)ch=nc();if(ch=='K'){k=read();set<int>::iterator iter=st.lower_bound(k-delta);if(iter==st.end())st.insert(k-delta);else if(*iter+delta>k)st.erase(iter),st.insert(k-delta);}else{++delta;st.insert(-1000000000-delta);}}printf("%d\n",st.size());
}

bzoj5427

转载于:https://www.cnblogs.com/quzhizhou/p/10070606.html

【bzoj5427】最长上升子序列(贪心+LIS)相关推荐

  1. 最长递增子序列(LIS)

    最长递增子序列(LIS) 问题描述: 求一个序列的最长递增子序列,这样的子序列是允许中间越过一些字符的,即留"空". 例如:4 2 3 1 5 的最长递增子序列为 2 3 5,长度 ...

  2. 最长上升子序列问题 (LIS)

    最长上升子序列问题(LIS): 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的.对于给定的一个序列(a1, a2, ..., aN),我们可以 ...

  3. [51Nod 1218] 最长递增子序列 V2 (LIS)

    传送门 Description 数组A包含N个整数.设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS).A的LIS可 ...

  4. 动态规划——最长上升子序列问题(LIS)

    动态规划--最长上升子序列问题(LIS) 最长上升子序列问题(LIS).给定n个整数A1,A2,-,AnA_1, A_2, \dots , A_n,按从左到右的顺序选出尽量多的整数,组成一个上升子序列 ...

  5. 最长上升子序列(LIS)问题的解决及优化

    1.LIS:最长上升子序列问题 LIS问题的描述为:给定一个整数序列array,找到它的所有严格递增子序列中最长的序列,输出其长度. 例:10 9 2 5 3 7 101 18 它的最长上升子序列有: ...

  6. 最长上升子序列(LIS)/最长不上升子序列问题算法详解+例题(树状数组/二分优化,看不懂你来打我)

    目录 最长上升子序列 一.朴素做法O(2n)O(2^n)O(2n) 二.优化做法O(nlogn)O(nlogn)O(nlogn) 三.例题引入:P1020 导弹拦截(求最长上升子序列和最长不上升子序列 ...

  7. 最长上升子序列(LIS)算法

    LIS定义 LIS(Longest Increasing Subsequence)最长上升子序列  一个数的序列bi,当b1 < b2 < - < bS的时候,我们称这个序列是上升的 ...

  8. 最长上升子序列(LIS) 学习总结

    前言 鉴于本蒟蒻的dp学的实在是一坨答辩,临近lqb开始重新学习一遍dp,在acwing和LIS搏斗两天之后,写一篇总结,加深一下印象. 模板 最长上升子序列 题意与大致思路 题意: 给一个数组,找数 ...

  9. LCS最长公共子序列和LIS最长上升子序列——例题剖析

    一.LCS最长公共子序列 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我) longest comment subsequence 模板题 longe ...

  10. 动态规划-最长上升子序列(LIS)

    这题目是经典的DP题目,也可叫作LIS(Longest Increasing Subsequence)最长上升子序列 或者 最长不下降子序列.很基础的题目,有两种算法,复杂度分别为O(n*logn)和 ...

最新文章

  1. Oralce中的to_date()函数
  2. 第二十八条:利用有限制通配符来提升API的灵活性
  3. 【算法】一个简单的线性判别分析(LDA)原理
  4. IOS静态库生成及测试
  5. MySQL的四种不同查询的分析
  6. 关于c#静态构造函数
  7. linux批量切割图片,MAC中用Shell脚本批量裁剪各种尺寸的App图标
  8. Elasticsearch整理笔记(一)
  9. 设计讨论:设计什么样的框架?
  10. D3.js 力导向图来处理拓扑图
  11. 转Linux多线程条件下的计数器 2011-11-15 00:00中国IT实验室佚名
  12. codeforces D. Palindrome pairs 动态规划
  13. 鸿蒙系统可以上外网吗,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  14. 无视硬件检测直接运行Win10混合现实门户
  15. #ACCV2022还有两周截稿#疫情过后期待相聚澳门,相邀参与亚洲视觉盛会
  16. 无限超越超级机器人nds_无限边境超级机器人大战OG传说超越隐藏宝箱
  17. 计算机教师师徒结对协议,学期信息技术师徒结对总结
  18. Qt生成exe错误:无法定位程序输入点_cxa_throw_bad_array_new_length于动态链接库最终解决方法
  19. boolean的由来及使用
  20. 华为HCIA Cloud Computing 华为HCIA考证笔记(已获取该证书)

热门文章

  1. Office+SharePoint+Server+2007+部署图示指南
  2. C++:从子类访问父类的私有函数
  3. 批处理start命令学习
  4. VC++6 开发MFC扩展DLL以及MFC DLL可以包含界面
  5. C++类和对象学习总结
  6. iOS 开发一定要尝试的 Texture(ASDK)
  7. Nginx在Windows系统和Linux系统下的重启
  8. new relic 官方简介
  9. [转载]实际举例C#引用类型和值类型的区别
  10. 【C语言学习笔记】——1.起始