题目:
使用双向链表!
离线做,先抽出来排个序,按排序确定每个位置的 pre 和 nxt ,然后倒序查找,找完一个就删除一个值,更改 pre 和 nxt。
代码如下:
#include#include #include #include using namespace std;typedef long long ll;int const maxn=33000;int n,pre[maxn],nxt[maxn],rk[maxn];ll a[maxn],inf=1e12,ans;bool cmp(int x,int y){ return a[x] 1;i--) { ll l=inf,r=inf; if(pre[i])l=abs(a[i]-a[pre[i]]); if(nxt[i])r=abs(a[i]-a[nxt[i]]); ans+=min(l,r); nxt[pre[i]]=nxt[i]; pre[nxt[i]]=pre[i]; } ans+=a[1]; printf("%lld",ans); return 0;}