AcWing 907. 区间覆盖 (区间贪心)

简介: 笔记

AcWing 907. 区间覆盖


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


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


输入格式

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


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


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


输出格式

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


如果无解,则输出-1。


数据范围4.png


思路

①将所有区间按左端点从小到大排序


②从前往后依次枚举每个区间,在所有能覆盖start的区间中,选择右端点最大的区间


选完之后将start更新成右端点的最大值 依次选择区间并更新start如果最后一次更新的start


代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 100010;
int n;
int main() {
  scanf("%d", &n);
  priority_queue<int, vector<int>, greater<int>>p;
  for (int i = 0; i < n; ++i) {
    int x; scanf("%d", &x);
    p.push(x);
  }
  LL res = 0;
  while (!p.empty()) {
    if (p.size() != 1) {
      int a = p.top();
      p.pop();
      int b = p.top();
      p.pop();
      res += (LL)a + b;
      p.push(a + b);
    }
    else {
      p.pop();
    }
  }
  cout << res << endl;
  return 0;
}


目录
相关文章
|
人工智能
线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列
线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列
81 0
子数组问题总结(很多子数组求法类似,暴力求法)
子数组问题总结(很多子数组求法类似,暴力求法)
子数组问题总结(很多子数组求法类似,暴力求法)
|
人工智能 算法 搜索推荐
LeetCode 周赛 338,贪心 / 埃氏筛 / 欧氏线性筛 / 前缀和 / 二分查找 / 拓扑排序
大家好,我是小彭。 上周末是 LeetCode 第 338 场周赛,你参加了吗?这场周赛覆盖的知识点很多,第四题称得上是近期几场周赛的天花板。
111 0
|
算法
LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树
今天讲 LeetCode 单周赛第 340 场,今天状态不好,掉了一波大分。
104 0
AcWing 246. 区间最大公约数 (gcd性质 线段树)
AcWing 246. 区间最大公约数 (gcd性质 线段树)
110 0
AcWing 246. 区间最大公约数 (gcd性质 线段树)