1 #include<cstdio>
2 #include<algorithm>
3 using namespace std;
4 const int maxn=100000+10,inf=0x3f3f3f3f;
5 typedef long long ll;
6 int a[maxn],b[maxn];
7 int n,mx=0,mn=inf;
8 bool check(int x){
9 ll follow=0;
10 for(int i=1;i<n;i++){
11 ll y=b[i]+follow;
12 if(y<x){
13 follow=y-x+(a[i]-a[i+1]);//向后边借
14 }
15 else{
16 follow=y-x-(a[i+1]-a[i]);//向后边送
17 if(follow<0) follow=0;//若多出的不够路费,不送
18 }
19 }
20 return b[n]+follow>=x;//判断最后是否符合要求,因为前面操作确保1到n-1符合
21 }
22 void solve(){
23 int l=mn,r=mx;
24 while(l<r){//不能写l<=r,可能会死循环,若l==4,r==4,mid==4符合,r==4,有=,l一直等于4
25 int mid=(l+r+1)>>1;//+1避免死循环
26 if(check(mid)) l=mid;
27 else r=mid-1;
28 }
29 printf("%d\n",l);
30 }
31 int main(){
32 scanf("%d",&n);
33 for(int i=1;i<=n;i++){
34 scanf("%d%d",&a[i],&b[i]);
35 mn=min(mn,b[i]);
36 mx=max(mx,b[i]);//求出二分范围
37 }
38 solve();
39 return 0;
40 }