【题目大意】

在\(1\)~\(N\)的序列上有\(M\)个区间,使得这\(M\)个小区间每个覆盖了且仅覆盖了一个点,求最多点数,如果无解,输出\(-1\)。

【分析】

刚开始做的时候我是懵的。。。不管三七二十一开始想差分约束系统,无奈没那么好的思维,没想出来。。。

一翻题解,,\(WOC!!!\)这是什么神仙\(DP?\)真的是学到了。。。

我们设\(f[i]\)表示序列的第\(i\)位是一个点时,序列\(1\)~\(i\)的最多点数。

那么\(dp\)方程就很好推了:设\(j\)<\(i\),即有\(f[i]=max(f[j]+1, f[i])\)。

现在我们需要解决的是\(j\)的范围,也就是\(f[i]\)能从哪些状态中转移过来。

我们想,如果第\(i\)位是一个点,那么所有包含这个点的区间都不能再有点,也就是说,\(j\)必须小于包含第\(i\)位这个点的区间中最小的左端点

同样的,每个区间上必须有一个点,所以,\(j\)必须大于或等于不包含第\(i\)位这个点的区间中最大的左端点

至于怎么求,大家可以\(YY\)了。

我们会惊奇地发现\(DP\)方程满足单调性,于是单调队列走起。

细节见代码。

至于差分约束的做法嘛,,,以后会补的,,,咕咕咕

【code】

//#include<bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("O2")
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAX = 2000000 + 5;
inline int read(){
int f = 1, x = 0;char ch;
do { ch = getchar(); if (ch == '-') f = -1; } while (ch < '0'||ch>'9');
do {x = x*10+ch-'0'; ch = getchar(); } while (ch >= '0' && ch <= '9');
return f*x;
}
int n, m, l[MAX], r[MAX], f[MAX], ans, q[MAX];
int main(){
// freopen("aaa.in", "r", stdin);
// freopen("aaa.out", "w", stdout);
int n = read(), m = read();
for (int i = 1;i <= n + 1; ++i) r[i] = i - 1;
for (int i = 1;i <= m; ++i) {
int x = read(), y = read();
r[y] = min(r[y], x - 1);
l[y + 1] = max(l[y + 1], x);
}
for (int i = n; i > 0; --i) r[i] = min(r[i], r[i + 1]);
for (int i = 2; i < n + 2; ++i) l[i] = max(l[i], l[i - 1]);
int j = 1, h = 1, t = 1; q[1] = 0;
for (int i = 1;i <= n + 1; ++i) {
while (j <= r[i] && j <= n) {
if (f[j] == -1) {
++j;
continue;
}
while (f[j] > f[q[t]] && h <= t) --t;
q[++t] = j;
++j;
}
while (q[h] < l[i] && h <= t) ++h;
if (h <= t) f[i] = f[q[h]] + (i != n+1 ? 1 : 0);
else f[i] = -1;
}
printf("%d", f[n + 1]);
return 0;
}

【简●解】[USACO] 照片Photo的更多相关文章

  1. python ConfigParser、shutil、subprocess、ElementTree模块简解

    ConfigParser 模块 一.ConfigParser简介ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ]”内包含的为section.section 下面为类 ...

  2. 洛谷 P3084 [USACO13OPEN]照片Photo 解题报告

    [USACO13OPEN]照片Photo 题目描述 农夫约翰决定给站在一条线上的\(N(1 \le N \le 200,000)\)头奶牛制作一张全家福照片,\(N\)头奶牛编号\(1\)到\(N\) ...

  3. [USACO13OPEN]照片Photo

    题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows (1 <= N < ...

  4. P3084 [USACO13OPEN]照片Photo (dp+单调队列优化)

    题目链接:传送门 题目: 题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows ( ...

  5. P3084 [USACO13OPEN]照片Photo

    题目描述 农夫约翰决定给站在一条线上的N(1 <= N <= 200,000)头奶牛制作一张全家福照片,N头奶牛编号1到N. 于是约翰拍摄了M(1 <= M <= 100,00 ...

  6. 洛谷 USACO P2207 Photo

    P2207 Photo 题目描述 Framer Jhon 打算给他的N头奶牛照相,( 2 <= N <= 1 000 000 000) . 他们排成一条线,并且依次取1~N作为编号. 每一 ...

  7. AC题目简解-数据结构

    A - Japan  POJ 3067 要两条路有交叉,(x1,y1)(x2,y2)那么需要满足:(x1-x2)*(y1-y2)<0判断出这是求逆序的问题 树状数组求逆序,先通过自定义的比较器实 ...

  8. UE4 RHI与Render模块简解

    UE4中的RHI指的是Render hardware interface,作用像Ogre里的RenderSystem,针对Dx11,Dx12,Opengl等等平台抽象出相同的接口,我们能方便能使用相同 ...

  9. zabbix基本监控各指标简解

    监控项目及使用模板 监控http和https: Template App HTTP Service     Template App HTTPS Service 监控cpu,内存,网络等: Templ ...

随机推荐

  1. 解决Excel打开UTF-8编码CSV文件乱码的问题

    打开 Excel,执行“数据”->“自文本”,选择 CSV 文件,出现文本导入向导,选择“分隔符号”,下一步,勾选“逗号”,去掉“ Tab 键”,下一步,完成,在“导入数据”对话框里,直接点确定 ...

  2. 两行代码搞定网站gzip压缩

    网站使用gzip压缩的好处就不用多说了吧,自行脑补,来说一下如何使用nodejs实现gzip压缩,只需要两行代码,so ease. 通过nodejs实现gzip 需要用到的模块 compression ...

  3. python 类属性和实例属性、方法 访问权限问题

    class Animal: cls_attr = 'cls_attr' _cls_attr = '_cls_attr' __cls_attr = '__cls_attr' def __init__(s ...

  4. 第十五篇 .NET高级技术之正则表达式

    正则表达式 正则表达式是对字符串进行匹配的语法,像name like '%李%'一样,定义了一些特殊的“元字符”,用来判断一个字符串是否满足某个规则.正则表达式非常深,编译器都是基于正则表达式,掌握基 ...

  5. android 多线程(二)

    1. 使用 AsyncTask 实现进度条 package com.test.network; import android.os.AsyncTask; import android.support. ...

  6. Mirror Number SPOJ - MYQ10

    Mirror Number SPOJ - MYQ10 题意:http://blog.csdn.net/hcbbt/article/details/38349367 稍微改一下http://www.cn ...

  7. hibernate Day1 案例代码

    1.创建Person类 package com.icss.pojo; public class Person { private int uid; private String uname; priv ...

  8. 2019/05/11 Java内存结构

    1.  类加载子系统:负责从文件系统或者网络加载Class信息,加载的信息存放在一块称之方法区的内存空间. 2.  方法区:就是存放类的信息.常量信息.常量池信息.包括字符串字面量和数字常量等. 3. ...

  9. 个人作业(alpha)

    这个作业属于哪个课程  https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里  https://edu.cn ...

  10. RecycleView的万能适配器

    转载自http://www.cnblogs.com/liushilin/p/5720926.html 由于RecyclerView的Adapter必须继承自RecyclerView.Adapter,并 ...