原题链接

神仙\(DP\)啊。。。

题解请移步隔壁大佬的博客\(QAQ\)

#include<cstdio>
using namespace std;
const int N = 2e5 + 10;
int L[N], R[N], q[N], f[N];
inline int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c < '0' || c > '9'; c = getchar())
p |= c == '-';
for (; c >= '0' && c <= '9'; c = getchar())
x = x * 10 + c - '0';
return p ? -x : x;
}
inline int minn(int x, int y)
{
return x < y ? x : y;
}
inline int maxn(int x, int y)
{
return x > y ? x : y;
}
int main()
{
int i, j = 0, n, m, x, y, l = 1, r = 0;
n = re();
m = re();
for (i = 2; i <= n + 1; i++)
R[i] = i - 1;
for (i = 1; i <= m; i++)
{
x = re();
y = re();
R[y] = minn(R[y], x - 1);
L[y + 1] = maxn(L[y + 1], x);
}
for (i = n; i; i--)
R[i] = minn(R[i], R[i + 1]);
for (i = 2; i <= n + 1; i++)
L[i] = maxn(L[i], L[i - 1]);
for (i = 1; i <= n + 1; i++)
{
for (; j <= R[i]; j++)
if (f[j] >= 0)
{
for (; l <= r && f[q[l]] < f[j]; r--);
q[++r] = j;
}
for (; l <= r && q[l] < L[i]; l++);
if (l <= r)
f[i] = f[q[l]] + 1;
else
f[i] = -1;
}
printf("%d", f[n + 1] > 0 ? f[n + 1] - 1 : -1);
return 0;
}

最新文章

  1. 【原创分享&#183;微信支付】 C# MVC 微信支付教程系列之公众号支付
  2. 从零点壹开始学JAVA(DAY 1 笔记)&lt;补充记录&gt;
  3. 如何监控业务的响应速度?Cloud Insight SDK 实践分享
  4. ASP.NET MVC Partial页输出JS
  5. mysql添加用户权限
  6. .NET设计模式(9):桥接模式(Bridge Pattern)
  7. CMarkUp读写XML(转)
  8. java--多线程之Runnable
  9. 安装scrapy框架的常见问题及其解决方法
  10. openstack-ocata-网络服务5
  11. Python爬虫9-request包介绍及应用
  12. const命令声明变量应注意的几点
  13. 洛谷P2057 【SHOI2007】善意的投票
  14. spark中saveAsTextFile的错误
  15. python零散补充与总结
  16. python里面的数学
  17. Jmeter+maven+Jenkins构建云性能测试平台(mark 推荐)
  18. vue实现上传上删除压缩图片
  19. 新手学ajax2
  20. react +MUI checkbox使用

热门文章

  1. CAP与Base理论
  2. redis序列化异常------------org.springframework.data.redis.serializer.SerializationException
  3. ssh架构之hibernate(一)简单使用hibernate完成CRUD
  4. CentOS7下解决yum install mysql-server没有可用包
  5. 如何获得scala的帮助和退出
  6. 解题(JuZhengCalculate-矩阵乘法计算量)
  7. Archlinux 遇到的坑
  8. as3.0橡皮擦功能
  9. AI图谱
  10. LCS poj1080