记录编号 |
125832 |
评测结果 |
AAAAAAAAAA |
题目名称 |
数列 |
最终得分 |
100 |
用户昵称 |
ztx |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.025 s |
提交时间 |
2014-10-10 08:25:15 |
内存使用 |
0.92 MiB |
显示代码纯文本
/*
author :hzoi_ztx
title :cogs 859 数列
ALG :树状数组
comment :
*/
#include <cstdio>
#include <cstring>
#define maxn 50010
#define maxm 32770
typedef long long ll ;
int n ;
ll ans = 0 ;
int A[maxn] = {0} ;
int L[maxn] = {0} ;
ll C[maxm] = {0} ;
inline int lowbit(int x) { return x&(-x) ; }
inline ll sum(int p) {
ll ret = 0 ; p ++ ;
while (p > 0) { ret += C[p] ; p -= lowbit(p) ; } ;
return ret ;
}
inline void add(int p) {
p ++ ; while (p <= maxm) { C[p] ++ ; p += lowbit(p) ; } ;
}
int main() {
#define READ
#ifdef READ
freopen("queueb.in" ,"r",stdin ) ;
freopen("queueb.out","w",stdout) ;
#endif
scanf("%d", &n ) ; int i ;
for (i = 0 ; i < n ; i ++ ) scanf("%d", &A[i] ) ;
for (i = 0 ; i < n ; i ++ ) L[i] = sum(A[i]-1) , add(A[i]) ;
memset(C , 0 , sizeof (C)) ;
for (i = n-1 ; i >= 0 ; i -- ) ans += L[i]*sum(A[i]-1) , add(A[i]) ;
printf("%lld", ans ) ;
return 0 ;
}