题目

\(DP\)

设状态\(dp[i]\)为\(i\)位置放了斑点牛,前\(i\)个位置能得到的最多的牛。

有方程\(dp[i]=max(dp[j]+1,dp[i])\),而我们并不知道什么\(j\)可以使\(i\)不在区间内

由于\(i\)位置放了牛,又因为\(i\)所在的区间只能放一个,\(j\)不能跟\(i\)同属于一个区间,又因为每个区间有且都有一个斑点牛,因此,每个区间都要有一个数,对于每个\(i\),都会有一段区间里的下标\(j\)可以用来转移\(i\),现在问题转化为了如何求对于每个\(i\)所对应的\(j\)的所在的区间问题。

每个区间不会有两个斑点牛此条件:首先\(j\)一定比\(i\)之后的所有位置的所在的最左边的左端点的区间要小这是显然的,设此左端点\(l\)为\(i\)对应的\(j\)最大为多少。

每个区间至少有一个斑点牛此条件:因为已经枚举到了第\(i\)个位置,因此\(r\)比\(i\)小的区间一定要有值,因此\(j\)一定要在一个\(r\)比\(i\)小且\(l\)最大的\(l\)右边,因为我们是动态规划,所以我们只需要用到\(dp[j]\)这个状态,而且这个状态在之前算\(dp[j]\)的时候就已经符合题目要求的了,而且\(j\)一定属于\(i\)之前的\(l\)最大的区间

#include <bits/stdc++.h>
#define N 2010010
using namespace std;
deque <int> q;
int n, m, ans, dp[N], l[N], r[N];//dp[i]表示i位置放斑点牛,前i个位置所得到的最多的牛。
//r[i]代表着i之后的区间的最小左端点。j一定不能比r[i]大
//l[i]代表着i之前的区间的最大左端点。j同时不能比l[i]小,因为如果j比l[i]小的话,那
inline void init()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n + 1; i++)
r[i] = i;
for (int i = 1; i <= m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
r[b] = min(a, r[b]);//b位置的j取值一定要比r小
l[b + 1] = max(a, l[b + 1]);//b+1的j位置一定要比l大
}
for (int i = n; i >= 1; i--)//此i的r值必须要比i+1小,因为i+1取不到的,i也不能取到。
r[i] = min(r[i + 1], r[i]);
for (int i = 2; i <= n + 1; i++)//此i的l值必须必i-1大,因为首先需要满足i-1位置的值。
l[i] = max(l[i - 1], l[i]);
}
int main()
{
init();
q.push_back(0);
int j = 1;
for (int i = 1; i <= n + 1; i++)
{
while (j < r[i])//j首先要比r小,
{
if (dp[j] != -1)
{
while (!q.empty() && dp[j] > dp[q.back()])
q.pop_back();
q.push_back(j);
}
j++;
}
while (!q.empty() && q.front() < l[i])//其次要比l大
q.pop_front();
if (!q.empty()) dp[i] = max(dp[i], dp[q.front()] + (int) (i != n + 1) );
else dp[i] = -1;
}
printf("%d", dp[n + 1] ? dp[n + 1] : -1);
return 0;
}

洛谷P3084 [USACO13OPEN]照片的更多相关文章

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

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

  2. 洛谷3084 [USACO13OPEN]照片Photo

    原题链接 神仙\(DP\)啊... 题解请移步隔壁大佬的博客\(QAQ\) #include<cstdio> using namespace std; const int N = 2e5 ...

  3. 洛谷P3085 [USACO13OPEN]阴和阳Yin and Yang(点分治,树上差分)

    洛谷题目传送门 闲话 偶然翻到一道没有题解的淀粉质,想证明一下自己是真的弱 然而ZSYC(字符串组合)早就切了 然后证明成功了,WA到怀疑人生,只好借着ZSY的代码拍,拍了几万组就出来了... 思路 ...

  4. P3084 [USACO13OPEN]照片Photo

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

  5. 洛谷 P1583 魔法照片【二级结构体排序】

    题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序 ...

  6. 洛谷P1583 魔法照片【模拟+排序】

    一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序,每人就有 ...

  7. 洛谷 P2209 [USACO13OPEN]燃油经济性Fuel Economy

    P2209 [USACO13OPEN]燃油经济性Fuel Economy 题目描述 Farmer John has decided to take a cross-country vacation. ...

  8. 洛谷 P1583 魔法照片

    P1583 魔法照片 题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初 ...

  9. 洛谷P1583——魔法照片(结构体排序)

    https://www.luogu.org/problem/show?pid=1583#sub 题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人. ...

随机推荐

  1. Ubuntu 16 PPA源管理(查询、添加、修改、删除)

    查询 在Ubuntu中,每个PPA源是单独存放在/etc/apt/sources.list.d/文件夹中的,进入到该文件夹,使用ls命令查询即可列出当前系统添加的PPA源. 添加 sudo add-a ...

  2. apache poi操作office文档----java在线预览txt、word、ppt、execel,pdf代码

    在页面上显示各种文档中的内容.在servlet中的逻辑 word: BufferedInputStream bis = null;  URL url = null;  HttpURLConnectio ...

  3. JavaIO学习:字符流

    JavaIO流之字符流 字符流 Reader InputStreamReader FileReader:专门用于处理文件的字符读取流对象. Writer OutputStreamWriter File ...

  4. golang 学习笔记 ---JSON

    JSON解析到结构体 在介绍这部分之前先简要介绍一下Json语法 JSON 语法是 JavaScript 语法的子集.JSON 语法是 JavaScript 对象表示法语法的子集. 数据在名称/值对中 ...

  5. [原创]Spring-Security-Oauth2.0浏览器端的登录项目分享

    1.简介 ​ CitySecurity项目为正式上线项目做得一个Demo,这里主要介绍浏览器端的登录.本项目使用了SpringSecurity实现表单安全登录.图形验证的校验.记住我时长控制机制.第三 ...

  6. WMware Workstation Pro安装教程

    [1]右键单击WMware Workstation Pro的可执行文件(.exe),选择以管理员身份运行 [2]点击下一步 [3]勾选我接受许可协议中的条款,点击下一步 [4]点击更改,选择安装位置( ...

  7. MySql 获取数据库的所有表名

    目录 写在前面 根据数据库获取该数据库下所有的表名 根据表名获取列名与列值 写在前面 在实现某个功能的时候,需要使用MySql数据库获取某数据的所有的表名以及该表名的所有列名与列值. 根据数据库获取该 ...

  8. 北理工机器人队RM视觉组ubuntu必备软件安装指南

    基础软件安装 sudo apt update && sudo apt upgrade sudo apt install git curl vim gcc g++ cmake与make ...

  9. 面试官:“谈谈Spring中都用到了那些设计模式?”。

    我自己总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 41k+ Star.会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://github.com/Snailclim ...

  10. SpringBoot嵌入式Tomcat的自动配置原理

    在读本篇文章之前如果你读过这篇文章SpringBoot自动装配原理解析应该会更加轻松 准备工作 我们知道SpringBoot的自动装配的秘密在org.springframework.boot.auto ...