Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
138855 | 陈家宝 | 学生排队 | C++ | 通过 | 100 | 29 MS | 9728 KB | 772 | 2024-03-19 16:31:10 |
#include<bits/stdc++.h> using namespace std ; int n ; long long a [100001] , f [1000001] , sum [100001] ; int lwb ( int n ){ return n & -n ; } void md ( int id ){ while ( id <= 1e6 ){ f [id] ++ ; id += lwb ( id ) ; } return; } int gt ( int id ){ int ans = 0 ; while ( id > 0 ){ ans += f [id] ; id -= lwb ( id ) ; } return ans; } int main ( ) { cin >> n ; for( int i = 1 ; i <= n ; i ++ ){ cin >> a [i] ; a [i] ++ ; md ( a [i] ) ; sum [i] = i - gt ( a [i] ) ; } memset ( f , 0 , sizeof ( f ) ) ; for ( int i = n ; i >= 1 ; i -- ){ md ( a [i] ) ; sum [i] += gt ( a [i] - 1 ) ; } long long ans = 0 ; for ( int i = 1 ; i <= n ; i ++ )ans += ( 1 + sum [i] ) * sum [i] / 2 ; cout << ans; return 0 ; }