最小覆盖_KEY
最小覆盖(cover)、、线段树
【题目描述】
给定 N 个区间[Li,Ri],需要你按照顺序选出一个区间序列使得[1,M]完全被覆盖。并且在选出来的序列中,某个区间[a,b]之前必须保证[1,a]都被已经选中的区间覆盖(即没有“断开”的地方)。求出最少需要选多少区间
【输入文件】
第一行两个整数 M 和 N。
以下 N 行每行两个正整数 Li,Ri 表示这个区间。
【输出文件】
一个整数,表示最少的区间数。
【样例输入】
40 6
20 30
1 10
10 20
20 30
15 25
30 40
【样例输出】
4
【样例解释】
[1,10]-[10,20]-[20,30]-[30,40]
【数据规模】
对于 100%的数据 1<=N<=500000, 0<=M<=50000
先不看数据,知道这是一道DP题。
F[i]表示填满1~i区间最少需要几个区间。
因为数据范围大,所以用线段树维护。
code:
#include <cstdio>
#include <cctype>
#include <algorithm>
#define C c = tc ( )
using namespace std;
inline char tc(){
static char fl[],*A,*B;
return A==B&&(B=(A=fl)+fread(fl,,,stdin),A==B)?EOF:*A++;
}
inline int read(){
char c;int x=,y=;
while(!isdigit(C)&&c!='-');c=='-'?y=-:x=c-'';
while(isdigit(C))x=x*+c-'';
return x*y;
}
struct node{
int x,y;
}a[];
int m,n,seg[*+],add[*+];
void up(int node){seg[node]=min(seg[node<<],seg[(node<<)+]);}
void down(int node){
if(add[node]!=){
add[node*]=min(add[node*],add[node]);
add[node*+]=min(add[node*+],add[node]);
seg[node*]=min(seg[node*],add[node]);
seg[node*+]=min(seg[node*+],add[node]);
add[node]=;
}
return ;
}
int query(int node,int l,int r,int ql,int qr){
if(ql<=l&&qr>=r)return seg[node];
int mid=(l+r)>>;
down(node);
int ans=;
if(ql<=mid)ans=min(ans,query(node*,l,mid,ql,qr));
if(qr>mid) ans=min(ans,query(node*+,mid+,r,ql,qr));
return ans;
}
void change(int node,int l,int r,int cl,int cr,int v){
if(cl<=l&&cr>=r){
seg[node]=min(seg[node],v);
add[node]=min(add[node],v);
return ;
}
int mid=(l+r)>>;
down(node);
if(cl<=mid)change(node*,l,mid,cl,cr,v);
if(cr>mid) change(node*+,mid+,r,cl,cr,v);
up(node);
}
int main(){
freopen("cover.in","r",stdin);
freopen("cover.out","w",stdout);
m=read(),n=read();
for(int i=;i<=n;i++)a[i].x=read(),a[i].y=read();
for(int i=;i<=m*;i++)seg[i]=add[i]=;
change(,,m,,,);
for(int i=;i<=n;i++){
int p=query(,,m,a[i].x,a[i].y);
if(p==)continue;
change(,,m,a[i].x,a[i].y,p+);
}
printf("%d",query(,,m,m,m));
fclose(stdin),fclose(stdout);
return ;
}
膜拜度神
最小覆盖_KEY的更多相关文章
- POJ2185Milking Grid(最小覆盖子串 + 二维KMP)
题意: 一个r*c的矩形,求一个子矩形通过平移复制能覆盖整个矩形 关于一个字符串的最小覆盖子串可以看这里http://blog.csdn.net/fjsd155/article/details/686 ...
- UVA 11419SAM I AM(输出 最小覆盖点 )
参考博客:如何找取 最小覆盖点集合 题意:R*C大小的网格,网格上面放了一些目标.可以再网格外发射子弹,子弹会沿着垂直或者水平方向飞行,并且打掉飞行路径上的所有目标,计算最小多少子弹,各从哪些位置发射 ...
- 二维KMP - 求字符矩阵的最小覆盖矩阵 - poj 2185
Milking Grid Problem's Link:http://poj.org/problem?id=2185 Mean: 给你一个n*m的字符矩阵,让你求这个字符矩阵的最小覆盖矩阵,输出这个最 ...
- KMP算法 - 求最小覆盖子串
KMP与最小覆盖子串 最小覆盖子串:对于某个字符串s,它的最小覆盖子串指的是长度最小的子串p,p满足通过自身的多次连接得到q,最后能够使s成为q的子串. 比如: 对于s="abcab&quo ...
- hdu---(1054)Strategic Game(最小覆盖边)
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu------1281 棋盘游戏(最小覆盖点)
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- Machine Schedule(最小覆盖)
其实也是个最小覆盖问题 关于最小覆盖http://blog.csdn.net/u014665013/article/details/49870029 Description As we all kno ...
- Asteroids (最小覆盖)
题目很简单,但是需要推到出二分图最大匹配 = 最小覆盖 最小覆盖:证明过程http://blog.sina.com.cn/s/blog_51cea4040100h152.html Descriptio ...
- zoj 1450 Minimal Circle 最小覆盖圆
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=450 You are to write a program to fi ...
随机推荐
- -webkit-overflow-scrolling 与滚动回弹效果.
参考来源:https://developer.mozilla.org/zh-CN/docs/Web/CSS/-webkit-overflow-scrolling https://www.w3cways ...
- DOM+面向对象面试题
1.dom常见的节点类型---------------------------解彬1510-B 1.nodeType------节点类型,元素节点是1,文本节点是3. 2.firstChild---- ...
- 传参时Url中有中文报错
url中如果传了中文,浏览器会报错:The header content contains invalid characters. 原因:浏览器自动把这个url进行decodeURIComponent ...
- linux下tomcat作为daemon进程运行
在linux下如果想让tomcat在开机时自启动,可以将启动代码写到/etc/rc.local里面.但是,这样的话,tomcat将以root权限运行,这是不安全的.因此,要想办法让tomcat以非特权 ...
- 在Python的Flask框架下Address already in use [地址已在使用中]
出现这种错误提示, 说明你已经有一个流程绑定到默认端口(5000).如果您之前已经运行过相同的模块,则很可能该进程仍然绑定到端口. 首先使用端口窗口查找进程 : sudo lsof - i : 5 ...
- java继承和多态举例
public class Test1 { public static void main(String[] args) { System.out.println(new Dog().name);//狗 ...
- Entity Framework Core Like 查询揭秘
在Entity Framework Core 2.0中增加一个很酷的功能:EF.Functions.Like(),最终解析为SQL中的Like语句,以便于在 LINQ 查询中直接调用. 不过Entit ...
- 制作Visual Studio 2017 (VS 2017) 离线安装包
史上功能最强大的Visual Studio 2017版本发布,但是由于版本更新速度加快和与第三方工具包集成的原因,微软研发团队没有为这个版本提供离线下载的安装文件.如果用户处在一个与外网隔离的网络环境 ...
- 使用HttpGet请求json数据
- shell下office、html、pdf文档互转方法
分类: 后台开发 版权声明:本文为博主原创文章,未经博主允许不得转载. OFFICE 文档在线预览方案很多: 服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览,比如flexp ...