Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52795 | wssdr | 木薯与身高 | C++ | 通过 | 100 | 325 MS | 15876 KB | 811 | 2022-07-20 11:58:12 |
#include<bits/stdc++.h> #define ll long long #define N 1000005 using namespace std; struct Node{int h,id;}; struct Node st[N]; int n;ll c[N],ans; inline bool cmp(const Node&x,const Node&y){ return (x.h^y.h)?x.h>y.h:x.id>y.id; } inline int lowbit(ll x){ return x&(-x); } inline void Insert(ll x){ ll tmp(x); while(x<=n){ c[x]=min(c[x],tmp); x+=lowbit(x); } } inline ll Min(int x){ ll res(n+1); while(x){ res=min(res,c[x]); x-=lowbit(x); } return res; } int main(){ scanf("%d",&n); for(int i(1);i<=n;++i){ scanf("%d",&st[i].h); st[i].id=i; } sort(st+1,st+1+n,cmp); for(int i(1);i<=n;++i) c[i]=n+1; for(int i(1),res;i<=n;++i){ res=Min(st[i].id); ans+=(res^n+1)?abs(st[i].id-res):0; Insert(st[i].id); } printf("%lld\n",ans); return 0; }