比赛 |
20120806 |
评测结果 |
AAAAAAAAAA |
题目名称 |
最接近神的人 |
最终得分 |
100 |
用户昵称 |
王者自由 |
运行时间 |
0.729 s |
代码语言 |
C++ |
内存使用 |
4.10 MiB |
提交时间 |
2012-08-06 09:55:20 |
显示代码纯文本
#include <cstdio>
const int N = 500000 + 10;
int n, a[N], b[N];
unsigned long long s;
void Merge(int l, int r) {
if(l >= r) return;
int m = (l + r) / 2;
Merge(l, m); Merge(m+1, r);
int i = l, j = m + 1, k = l;
do {
if(a[i] > a[j]) {
s += m - i + 1;
b[k++] = a[j++];
} else
b[k++] = a[i++];
} while(i <= m && j <= r);
while(i <= m) b[k++] = a[i++];
while(j <= r) b[k++] = a[j++];
for(int i=l; i<=r; i++) a[i] = b[i];
}
int main() {
freopen("sop.in", "r", stdin);
freopen("sop.out", "w", stdout);
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d", a+i);
Merge(1, n);
printf("%lld\n", s);
return 0;
}