set容器的运用+本身的lower_bound,逆序找前一个比 当前波浪小的最大波浪;
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <set>
#include <map>
using namespace std;
#define LL long long
const int MAXN=1e6+7;
int x[MAXN],y[MAXN];
set<int> sx, sy;
int main()
{
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i];
}
LL sum=0;
sx.insert(0),sy.insert(0);
for(int i=n;i>=1;i--)
{
set<int>::iterator it=sx.lower_bound(x[i]);
it--;
sum+=(x[i]-*it);
sx.insert(x[i]);
it=sy.lower_bound(y[i]);
it--;
sum+=(y[i]-*it);
sy.insert(y[i]);
}
cout<<sum<<endl;
return 0;
}