Stars 第一道树状数组的题。题意有点忽悠人了,其实就是给你n个数,每给人一个数判断之前有多少比当前的数小的。 树状数组看了好几回不知道怎么用,现在终于会一点了。 #include <iostream> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> #include <string> #include <cstdio> #include <climits> #include <queue> #include <map> #include <list> #include <vector> using namespace std; int c[32003]; int a[32003]; int mix = 32003; //第k个数加detal void insert(int k, int detal) { for (; k <= mix; k += (-k) & k) c[k] += detal; } //查前k个数的和 int getsum(int k) { int t; for (t = 0; k > 0; k -= (-k) & k) t += c[k]; return t; } int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) { int x; scanf("%d%*d", &x); //避免x为0 x++; //查前边有多少比它小的 a[getsum(x)]++; //加1 insert(x, 1); } for (int i = 0; i < n; i++) printf("%d/n", a[i]); return 0; }