39pts,错的挺整齐的
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 500005;
int n, tot, len;
ll maxa, ans = 1ll<<62;
struct Node{
ll a, b;
} rgn[N];
bool cmp(Node x, Node y){
return x.a < y.a || (x.a == y.a && x.b < y.b);
}
int main(){
ll x, y, tmp = 0;
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%lld%lld", &x, &y);
if(x < y) maxa = max(maxa, y);
else maxa = max(maxa, x), rgn[++tot].a = x, rgn[tot].b = y;
}
sort(rgn + 1, rgn + tot + 1, cmp);
for(int i = 1; i <= tot; i++) if(rgn[i].a != rgn[i-1].a){
while(len && rgn[i].b <= rgn[len].a) len--; len++;
rgn[len].a = rgn[i].a, rgn[len].b = min(rgn[len].b, rgn[i].b);
}
for(int i = 1; i <= len; i++){
ans = min(ans, tmp + maxa - rgn[i].b);
tmp += rgn[i].a-rgn[i].b << 1;
} ans = min(ans, tmp);
printf("%lld", maxa + ans);
return 0;
}