AtCoder Beginner Contest 463 D - Maximize the Gap 题解

昨天写得非常蒙

solve

  • 布的覆盖,贪心,尽可能多选(?)
  • 按布的右端点升序排序,排排排(?)
  • 最大最小,二分查找

TTC:典

  • 考虑开始二分,枚举最小距离,判断枚举的数
  • 搞搞搞(???)
#include<bits/stdc++.h>
#define Honkai ios::sync_with_stdio(0);
#define StarRail cin.tie(0);cout.tie(0);
#define endl '\n'
using namespace std;
constexpr int maxn=2e5+10;
long long n,k;
pair<long long,long long> bu[maxn];
bool cmp(pair<long long,long long> a,pair<long long,long long> b) {return a.second<b.second;}
bool check(long long x)
{
	long long cnt=0,lr=-0x3fffffffffffffff;
	for (long long i=1;i<=n;i++)
	{
		if (bu[i].first>lr && bu[i].first-lr>=x)
		{
			cnt++;
			lr=bu[i].second;
		}
		if (cnt>=k) return 1;
	}
	return 0;
}
long long binary_search()
{
	long long l=1,r=0x7fffffffffffffff,ans=-1;
	while (l<=r)
	{
		long long mid=(l+r)>>1;
		if (check(mid))
		{
			l=mid+1;
			ans=mid;
		}
		else r=mid-1;
	}
	return ans;
}
int main()
{
	cin >> n >> k;
	for (long long i=1;i<=n;i++) cin >> bu[i].first >> bu[i].second;
	sort(bu+1,bu+1+n,cmp);
	cout << binary_search() << endl;
	return 0;
}

记录

posted @ 2026-06-21 11:31  msjing  阅读(19)  评论(0)    收藏  举报