标签:
Time Limit: 7000MS | Memory Limit: 65536K | |
Total Submissions: 46080 | Accepted: 16763 |
Description
Input
Output
Sample Input
5 9 1 0 5 4 3 1 2 3 0
Sample Output
6 0
Source
#include <iostream> #include <stdio.h> #include <cmath> #include<stdlib.h> #include <algorithm> #include<string.h> using namespace std; int b[500005], c[500005]; int n; struct node { int num, id; } a[500005]; bool cmp(node a, node b) { return a.num < b.num; } int lowbit(int x) { return x&(-x); } void update(int i, int x) { while(i <= n) { c[i] += x; i = i + lowbit(i); } } int sum(int i) { int sum = 0; while(i > 0) { sum += c[i]; i = i - lowbit(i); } return sum; } int main() { int i; long long ans; while(scanf("%d", &n)!=EOF) { memset(b, 0, sizeof(b)); memset(c, 0, sizeof(c)); for(i = 1; i <= n; i++) { scanf("%d", &a[i].num); a[i].id = i; } sort(a+1, a+n+1, cmp); b[a[1].id] = 1; for(i = 2; i <= n; i++) { b[a[i].id] = i; } ans = 0; for(i = 1; i <= n; i++) { update(b[i], 1); ans += (sum(n)-sum(b[i])); } printf("%lld\n", ans); } return 0; }
poj 2299 Ultra-QuickSort(树状数组 / 求逆序数)
标签:
原文地址:http://blog.csdn.net/yeguxin/article/details/45174929