比赛 USACO银组复现(ION ONLINE模拟赛) 评测结果 AAAAAAAAAA
题目名称 Social Distancing 最终得分 100
用户昵称 数声风笛ovo 运行时间 0.463 s
代码语言 C++ 内存使用 15.18 MiB
提交时间 2020-04-05 14:59:13
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+9;
int m,n;
ll a[maxn],b[maxn];
bool check(ll dis){
	ll last=a[1];int now=1;
	for(int i=2;i<=n;i++){
		if(dis+last<=b[now]){
			last+=dis;
		}
		else{
			while(now<m&&last+dis>b[now]){
				now++;
			}
			if(last+dis>b[now]){
				return false;
			}
			last=last+dis<=a[now]?a[now]:last+dis;
		}
	}
	return true;
}
int main(){
	freopen("usaco_20Open_socdist.in","r",stdin);
    freopen("usaco_20Open_socdist.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
    	scanf("%lld%lld",&a[i],&b[i]);
	}
	sort(a+1,a+m+1);
	sort(b+1,b+m+1);
	ll l=0,r=b[m],mid;
	while(l<r){
		mid=(l+r)/2+1;
		if(check(mid)) l=mid;
		else r=mid-1;
	}
	printf("%lld\n",l);
	return 0;
}