我的30分代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
long long l,r,mid,ans;
struct POINT{
long long a,b;
} p[100005];
bool cmp(POINT m,POINT n){
return m.a<n.a;
}
bool check(long long a){
int c=p[1].a,pos=1,tick=1;
for(int i=2;i<=n;i++){
if(c>p[m].b-p[1].a)break;
c+=a;
if(c>p[pos].b)
if(pos+1>m)break;
else c=p[++pos].a;
tick++;
if(tick==n)break;
}
if(tick<n)return 0;
else return 1;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>p[i].a>>p[i].b;
}
sort(p+1,p+1+m,cmp);
l=1,r=(p[m].b-p[1].a)/(n-1);
while(l<=r){
mid=(r+l)/2;
if(check(mid))ans=mid,l=mid+1;
else r=mid-1;
}
cout<<ans;
}
提前感谢