博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 3126: [Usaco2013 Open]Photo——单调队列优化dp
阅读量:5945 次
发布时间:2019-06-19

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

Description

 给你一个n长度的数轴和m个区间,每个区间里有且仅有一个点,问能有多少个点

Input

 * Line 1: Two integers N and M.

* Lines 2..M+1: Line i+1 contains a_i and b_i.

Output

* Line 1: The maximum possible number of spotted cows on FJ's farm, or -1 if there is no possible solution.

Sample Input

5 3
1 4
2 5
3 4
INPUT DETAILS: There are 5 cows and 3 photos. The first photo contains cows 1 through 4, etc.

Sample Output

1
OUTPUT DETAILS: From the last photo, we know that either cow 3 or cow 4 must be spotted.
By choosing either of these, we satisfy the first two photos as 
well.
——————————————————————————————————
我们用f[i]表示选i这个位置放置特殊点的最优解
那么我们发现每个点可以选择的范围是一个区间
并且容易证明这个区间是随着位置的增加而右移也就是单调递增的
因为你选择了这个点 那么包含这个点的所有区间都不能再加点了
所以r【i】=min(包含i的区间的左端点-1)
因为每个区间都要有点所以l【i】=完整在i左边的区间中左端点的max
这样我们就得到了每个点的转移区间
这样完美符合单调队列的性质 所以就可以写了
#include
#include
#include
using std::min;using std::max;const int M=250007,inf=0x3f3f3f3f;int read(){ int ans=0,f=1,c=getchar(); while(c<'0'||c>'9'){
if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();} return ans*f;}int n,m,x,y;int l[M],r[M],f[M];int q[M],ql=1,qr;int main(){ n=read(); m=read(); for(int i=1;i<=n+1;i++) r[i]=i-1; for(int i=1;i<=m;i++){ x=read(); y=read(); r[y]=min(r[y],x-1); l[y+1]=max(l[y+1],x); } for(int i=n;i;i--) r[i]=min(r[i],r[i+1]); for(int i=2;i<=n+1;i++) l[i]=max(l[i],l[i-1]); f[qr=1]=0; for(int i=1;i<=n+1;i++){ for(int k=r[i-1]+1;k<=r[i];k++){ while(ql<=qr&&f[q[qr]]<=f[k]) qr--; q[++qr]=k; } while(ql<=qr&&q[ql]
qr) f[i]=-inf; else f[i]=f[q[ql]]+1; } if(f[n+1]>=0) printf("%d\n",f[n+1]-1); else printf("-1\n"); return 0;}
View Code

 

转载于:https://www.cnblogs.com/lyzuikeai/p/7566740.html

你可能感兴趣的文章
JS中加载cssText延时
查看>>
常用的脚本编程知识点
查看>>
计算机网络术语总结4
查看>>
新手小白 python之路 Day3 (string 常用方法)
查看>>
soapUI的简单使用(webservice接口功能测试)
查看>>
框架 Hibernate
查看>>
python-while循环
查看>>
手机端上传图片及java后台接收和ajaxForm提交
查看>>
【MSDN 目录】C#编程指南、C#教程、ASP.NET参考、ASP.NET 4、.NET Framework类库
查看>>
jquery 怎么触发select的change事件
查看>>
angularjs指令(二)
查看>>
<气场>读书笔记
查看>>
领域驱动设计,构建简单的新闻系统,20分钟够吗?
查看>>
web安全问题分析与防御总结
查看>>
React 组件通信之 React context
查看>>
Linux下通过配置Crontab实现进程守护
查看>>
ios 打包上传Appstore 时报的错误 90101 90149
查看>>
密码概述
查看>>
jQuery的技巧01
查看>>
基于泛型实现的ibatis通用分页查询
查看>>