洛谷3084 [USACO13OPEN]照片Photo
2024-10-11 11:13:10
原题链接
神仙\(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;
}
最新文章
- 【原创分享&#183;微信支付】 C# MVC 微信支付教程系列之公众号支付
- 从零点壹开始学JAVA(DAY 1 笔记)<;补充记录>;
- 如何监控业务的响应速度?Cloud Insight SDK 实践分享
- ASP.NET MVC Partial页输出JS
- mysql添加用户权限
- .NET设计模式(9):桥接模式(Bridge Pattern)
- CMarkUp读写XML(转)
- java--多线程之Runnable
- 安装scrapy框架的常见问题及其解决方法
- openstack-ocata-网络服务5
- Python爬虫9-request包介绍及应用
- const命令声明变量应注意的几点
- 洛谷P2057 【SHOI2007】善意的投票
- spark中saveAsTextFile的错误
- python零散补充与总结
- python里面的数学
- Jmeter+maven+Jenkins构建云性能测试平台(mark 推荐)
- vue实现上传上删除压缩图片
- 新手学ajax2
- react +MUI checkbox使用
热门文章
- CAP与Base理论
- redis序列化异常------------org.springframework.data.redis.serializer.SerializationException
- ssh架构之hibernate(一)简单使用hibernate完成CRUD
- CentOS7下解决yum install mysql-server没有可用包
- 如何获得scala的帮助和退出
- 解题(JuZhengCalculate-矩阵乘法计算量)
- Archlinux 遇到的坑
- as3.0橡皮擦功能
- AI图谱
- LCS poj1080