AT_joig2021_d 展覧会 2 (Exhibition 2) 题解
前置知识
解法
观察到要使价值最小值最大,考虑二分答案。
二分所能得到的华丽度,基本与 luogu P1182 数列分段 Section II 一致。具体地,依次枚举 \(1 \sim n\) 对距离和画的价值进行判定,注意对当前是第一次展出时进行特判。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define sort stable_sort
#define endl '\n'
struct node
{
int x,v;
}a[100001];
bool cmp(node a,node b)
{
return a.x<b.x;
}
bool check(int mid,int n,int m,int d)
{
int ans=0,last=0,i;
for(i=1;i<=n;i++)
{
if((last==0||a[i].x-a[last].x>=d)&&a[i].v>=mid)
{
last=i;
ans++;
}
}
return ans>=m;
}
int main()
{
int n,m,d,l=0,r=0,mid,ans=-1,i;
cin>>n>>m>>d;
for(i=1;i<=n;i++)
{
cin>>a[i].x>>a[i].v;
r=max(r,a[i].v);
}
sort(a+1,a+1+n,cmp);
while(l<=r)
{
mid=(l+r)/2;
if(check(mid,n,m,d)==true)
{
ans=mid;
l=mid+1;
}
else
{
r=mid-1;
}
}
cout<<ans<<endl;
return 0;
}
本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/18049566,未经允许严禁转载。
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。