题意是给你很多个区间,让你找覆盖恰好为k层的区间。
用扫描线直接做就行了。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cstdio>
using namespace std;
#define LL long long int
int n, k;
int a, b;
vector<int>vec;
struct node
{
int x, op;
}s[2000100];
bool CMP(node a, node b)
{
if (a.x == b.x)
return a.op > b.op;
return a.x < b.x;
}
int main()
{
scanf("%d%d", &n, &k);
int cmp = 0;
for (int i = 0;i < n;i++)
{
scanf("%d%d", &a, &b);
s[cmp].x = a;
s[cmp++].op = 1;
s[cmp].x = b;
s[cmp++].op = -1;
}
sort(s, s + cmp, CMP);
int cnt = 0;
for (int i = 0;i < cmp;i++)
{
if (s[i].op == 1)
{
cnt++;
if (cnt == k)
vec.push_back(s[i].x);
}
else
{
if (cnt == k)
vec.push_back(s[i].x);
cnt--;
}
}
printf("%d\n", vec.size()/2);
for (int i = 0;i < vec.size()/2;i++)
printf("%d %d\n", vec[i << 1], vec[i << 1 | 1]);
return 0;
}
区间覆盖问题详解
本文介绍了一种使用扫描线算法解决区间覆盖问题的方法。通过输入多个区间,找出那些被恰好k层覆盖的区间,并实现了完整的代码示例。
&spm=1001.2101.3001.5002&articleId=81606329&d=1&t=3&u=a71f11718fa445b2b824df6598769945)
109

被折叠的 条评论
为什么被折叠?



