题目大意
懒得写
做法
每一段内求个最高,列不等式。
#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
const int maxn=100000+10;
int d[maxn],h[maxn];
int i,j,k,l,t,n,m,x,y,ans;
bool czy;
int main(){
scanf("%d%d",&n,&m);
fo(i,1,m) scanf("%d%d",&d[i],&h[i]);
ans=max(h[1]+d[1]-1,h[m]+n-d[m]);
//d[0]=1;
czy=1;
fo(i,1,m-1){
y=d[i+1]-d[i];
x=(h[i+1]+y-h[i])/2;
ans=max(ans,h[i]+x);
if (h[i]<h[i+1]&&h[i]+y<h[i+1]) czy=0;
else if (h[i]>h[i+1]&&h[i]-y>h[i+1]) czy=0;
}
if (!czy) printf("IMPOSSIBLE\n");
else printf("%d\n",ans);
}