博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 931F - Teodor is not a liar!
阅读量:6542 次
发布时间:2019-06-24

本文共 929 字,大约阅读时间需要 3 分钟。

思路:

最长上升子序列

先差分数组染色

如果存在一个点,被所有区间包含,那么这张图一定是山峰状,如下图:

那么只要分别从前和从后找一个最长非严格上升子序列,然后从前往后更新就可以找出最大的山峰序列的长度,这个就是答案

代码:

#include
using namespace std;#define ll long long#define pb push_back#define mem(a,b) memset(a,b,sizeof(a))const int N=1e5+5;const int INF=0x3f3f3f3f;int a[N],dp[N],pre[N],suf[N];int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n,m,l,r; cin>>n>>m; for(int i=1;i<=n;i++)cin>>l>>r,a[l]++,a[r+1]--; for(int i=2;i<=m;i++)a[i]+=a[i-1]; mem(dp,INF); for(int i=1;i<=m;i++){ *upper_bound(dp+1,dp+m+1,a[i])=a[i]; pre[i]=lower_bound(dp+1,dp+m+1,INF)-dp-1; } mem(dp,INF); for(int i=m;i>=1;i--){ *upper_bound(dp+1,dp+m+1,a[i])=a[i]; suf[i]=lower_bound(dp+1,dp+m+1,INF)-dp-1; } int ans=0; for(int i=0;i<=m;i++)ans=max(ans,pre[i]+suf[i+1]); cout<
<

 

转载于:https://www.cnblogs.com/widsom/p/8515181.html

你可能感兴趣的文章
移动端html页面优化
查看>>
IT价值的三个境界
查看>>
what is the mean of thread safe ?线程安全是什么意思呢?
查看>>
ftp服务器 更加方便的文件传输
查看>>
mysql主从同步 错误测试(1)
查看>>
我的友情链接
查看>>
第二节 虚拟机的安装
查看>>
参加51CTO学院软考培训,我通过啦
查看>>
查看oracle数据库SID
查看>>
判断一个字符串是否为回文字符串
查看>>
1.1 面向对象前部分练习
查看>>
大数据Java-交换变量的 3 种方式
查看>>
使用三台主机部署LNMP
查看>>
如何开展全链路压测&全链路压测核心要素
查看>>
学习php课程的第六天
查看>>
nginx模块开发[转载]
查看>>
持续集成与持续部署宝典Part 1:将构建环境容器化
查看>>
关于html表格单元格宽度的计算规则
查看>>
我的友情链接
查看>>
Linux 脚本之用户创建
查看>>