http://poj.org/problem?id=3067
Description
Input
Output
Sample Input
1 3 4 4 1 4 2 3 3 2 3 1
Sample Output
Test case 1: 5
代码:
#include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> using namespace std; const int maxn = 1e6 + 10; int T, N, M, K; int c[maxn]; struct Node{ int x; int y; }node[maxn]; bool cmp(const Node &a, const Node &b) { if(a.x != b.x) return a.x < b.x; return a.y < b.y; } int lowbit(int x) { return x & (-x); } void add(int i, int val) { while(i <= M) { c[i] += val; i += lowbit(i); } } int getsum(int x) { int ans = 0; while(x > 0) { ans += c[x]; x -= lowbit(x); } return ans; } int main() { scanf("%d", &T); for(int t = 1; t <= T; t ++) { memset(c, 0, sizeof(c)); scanf("%d%d%d", &N, &M, &K); for(int i = 1; i <= K; i ++) scanf("%d%d", &node[i].x, &node[i].y); sort(node + 1, node + 1 + K, cmp); long long ans = 0; for(int i = 1; i <= K; i ++) { printf("!!!%d\n", getsum(M)); ans += getsum(M) - getsum(node[i].y); add(node[i].y, 1); } printf("Test case %d: %lld\n", t, ans); } return 0; }
树状数组求逆序对
所有美好的事情都应该有回音
原文:https://www.cnblogs.com/zlrrrr/p/10661058.html