#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6+8;
int read(){
int a=0,b=1;
char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') b=-1;
for(;isdigit(ch);ch=getchar()) a=a*10+(ch-48);
return a*b;
}
int n;
int maxn;
int minn=1e15;
int endn;
unordered_map<int,int> mp;
struct node{int a,b;}num[N];
int boc[N];
bool cmp(const node &f1,const node &f2){return f1.a==f2.a?f1.b<f2.b:f1.a<f2.a;}
int maxa,minb=1e15;
signed main(){
n=read();
for(int i=1;i<=n;i++) num[i].a=read(),num[i].b=read(),maxn=max(maxn,max(num[i].a,num[i].b)),minb=min(minb,num[i].b);
endn=maxn;
maxa=maxn;
sort(num+1,num+n+1,cmp);
for(int i=n;i>=1;i--){
if(num[i].a>num[i].b){
if(minn>num[i].b){
if(endn>num[i].b){
if(endn-num[i].b<=(min(minn,num[i].a)-num[i].b)*2){
maxn+=endn-num[i].b;
endn=num[i].b;
}
else{
maxn+=(min(minn,num[i].a)-num[i].b)*2;
minn=num[i].b;
}
}
}
}
}
maxa=maxa*2-minb;
printf("%lld\n",min(maxa,maxn));
return 0;
}
这是错误的贪心策略,但在当前数据下可以过