提交时间:2022-07-20 23:47:22

运行 ID: 53035

#include <bits/stdc++.h> using namespace std; const int N=1e6+5,M=1e7+5; int n; int a[N]; int L[N],R[N]; int tr[N]; inline int f(int a,int b) { if(a<b) return b; return a; } void buildtree(int x,int l,int r) { L[x]=l; R[x]=r; if(l==r) { tr[x]=a[l]; return ; } int mid=(l+r)/2; buildtree(x*2,l,mid); buildtree(x*2+1,mid+1,r); tr[x]=f(tr[x*2],tr[x*2+1]); } inline int query(int x,int q) { if(L[x]==R[x]) return L[x]; if(tr[x*2]>q) return query(x*2,q); if(tr[x*2+1]>q)return query(x*2+1,q); return 0; } long long ans; int x; int main() { scanf("%d",&n); for(register int i=1; i<=n; i++) scanf("%d",&a[i]); buildtree(1,1,n); for(register int i=1; i<=n; i++) { x=query(1,a[i]); if(x>0&&x<i) { ans+=a[x]-a[i]; } } printf("%lld\n",ans); return 0; }