Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
136580 | mairuisheng | 学生排队 | C++ | 通过 | 100 | 23 MS | 9732 KB | 665 | 2024-03-09 10:50:29 |
#include<iostream> #include<cstring> using namespace std; int n; long long a[100001],f[1000001],sum[100001]; int lowbit(int n){ return n&-n; } void modi(int id){ while(id<=1e6){ f[id]++; id+=lowbit(id); } return ; } int get(int id){ int ans=0; while(id>0){ ans+=f[id]; id-=lowbit(id); } return ans; } int main(){ cin>>n; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); a[i]++; modi(a[i]); sum[i]=i-get(a[i]); } memset(f,0,sizeof(f)); for(int i=n;i>0;i--){ modi(a[i]); sum[i]+=get(a[i]-1); } long long ans=0; for(int i=1;i<=n;i++){ ans+=(1+sum[i])*sum[i]/2; } cout<<ans<<endl; return 0; }