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;
}

浙公网安备 33010602011771号