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) 进行许可。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号