Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52900 | seanlsy | 木薯与身高 | C++ | 通过 | 100 | 60 MS | 11980 KB | 739 | 2022-07-20 12:08:31 |
#include <bits/stdc++.h> using namespace std; inline int read() { int x=0; bool f=1; char ch=getchar(); while(ch<48||ch>57) { if(ch=='-') f=0; ch=getchar(); } while(ch>=48&&ch<=57) { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); } return f?x:-x; } int n,l,r,mid,maxval[1000005],pos[1000005],a[1000005]; long long ans; int main() { n=read(); for(int i=1; i<=n; i++) { a[i]=read(); if(a[i]>maxval[i-1]) maxval[i]=a[i],pos[i]=i; else maxval[i]=maxval[i-1],pos[i]=pos[i-1]; l=0,r=i; while(l<r-1) { mid=l+r>>1; if(maxval[mid]>a[i]) r=mid; else l=mid; } if(a[i]<maxval[r]) ans+=i-pos[r]; } printf("%lld\n",ans); return 0; }