区间问题之区间覆盖(看一遍就会系列)

简介: 区间问题之区间覆盖(看一遍就会系列)

给定 N 个闭区间 [ai,bi] 以及一个线段区间 [s,t],请你选择尽量少的区间,将指定线段区间完全覆盖。


输出最少区间数,如果无法完全覆盖则输出 −1。


输入格式

第一行包含两个整数 s 和 t,表示给定线段区间的两个端点。


第二行包含整数 N,表示给定区间数。


接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。


输出格式

输出一个整数,表示所需最少区间数。


如果无解,则输出 −1。


数据范围

1≤N≤10^5

−10^9≤ai≤bi≤10^9

−10^9≤s≤t≤10^9

输入样例:
1. 1 5
2. 3
3. -1 3
4. 2 4
5. 3 5
输出样例:
2

思路:经典的贪心问题,区间问题,自己模拟一下选择最优的方式,总结归纳一下规则,就是贪心问题的条件边界

完整代码:

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
const int N=1e5+10;
typedef long long ll;
struct range{
    ll l,r;
    bool operator<(const range &w)const{
        return l<w.l;
    }
}range[N];
 
int main(){
    int L,R;
    cin>>L>>R;
    int n;
    cin>>n;
    for(int i=0;i<n;i++)cin>>range[i].l>>range[i].r;
    sort(range,range+n);
    int res=0;
    bool success=false;
    for(int i=0;i<n;i++)
    {
        int j=i;
        ll r=-2e9;
        while(j<n&&range[j].l<=L)
        {
            r=max(r,range[j].r);
            j++;
        }
        if(r<L)
        {
            res=-1;
            break;
        }
        res++;
        if(r>=R)
        {
            success=true;
            break;
        }
        L=r;
        i=j-1;
    }
    if(!success)res=-1;
    cout<<res;
}
 
 
 
 
 
相关文章
|
人工智能
【动态规划刷题 11】等差数列划分&& 最长湍流子数组
【动态规划刷题 11】等差数列划分&& 最长湍流子数组
【动态规划刷题 16】最长等差数列 (有难度) && 等差数列划分 II - 子序列
【动态规划刷题 16】最长等差数列 (有难度) && 等差数列划分 II - 子序列
|
7月前
|
C++
2589. 完成所有任务的最少时间(区间取点——贪心or线段树)
2589. 完成所有任务的最少时间(区间取点——贪心or线段树)
|
算法
代码随想录算法训练营第五十三天 | LeetCode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和
代码随想录算法训练营第五十三天 | LeetCode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和
61 1
|
算法
代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、209.长度最小的子数组、59. 螺旋矩阵 II
代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、209.长度最小的子数组、59. 螺旋矩阵 II
58 0
|
算法 索引
代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结
代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结
|
人工智能 算法 C语言
LeetCode.每日一题 1039. 多边形三角剖分的最低得分
这题是一道区间Dp问题,将一个多边形形划分为若干个三角形,求其最小的得分.
102 0
|
机器学习/深度学习 算法
代码随想录训练营day53| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和...
代码随想录训练营day53| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和...
区间选点(贪心)
这个题,虽然没有写过,但是我盲猜这个题肯定很经典
111 0
(二分)1227. 分巧克力
(二分)1227. 分巧克力
80 0

热门文章

最新文章