Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52794 | lz | 木薯与身高 | C++ | 运行出错 | 0 | 122 MS | 15716 KB | 874 | 2022-07-20 11:58:12 |
#include <bits/stdc++.h> using namespace std; const int N=1e6+5,M=8e6+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; }