Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
141851 | 刘嘉柚 | 音乐会 | C++ | 通过 | 100 | 18 MS | 4092 KB | 794 | 2024-04-06 13:03:56 |
#include<bits/stdc++.h> #define il inline #define rg register #define lst long long #define rgt register int #define N 500050 using namespace std; const int Inf=1e9; il int read() { int s=0,m=0;char ch=getchar(); while(!isdigit(ch)){if(ch=='-')m=1;ch=getchar();} while( isdigit(ch))s=(s<<3)+(s<<1)+(ch^48),ch=getchar(); return m?-s:s; } int n,top;lst Ans; int H[N],stk[N]; il void Calc(rgt x) { rgt le=0,ri=top,mid,ret=0; while(le<=ri) { mid=(le+ri)>>1; if(H[stk[mid]]>x)ret=mid,le=mid+1; else ri=mid-1; } if(!ret)Ans+=top; else Ans+=top-ret+1; } int main() { n=read(); for(rgt i=1;i<=n;++i)H[i]=read(); for(rgt i=1;i<=n;++i) { Calc(H[i]); while(top>0&&H[i]>H[stk[top]])--top; stk[++top]=i; }return printf("%lld\n",Ans),0; }