每次修改的是一个区间,所求的值是关于某个点的;
题目来源; color the ball
向下查询,向上统计
代码如下:
#include <iostream> #include <cstring> using namespace std; const int maxn = 100010; int c[maxn] = {0}; int n ; int lowbit(int x) { return (-x)&x; } void update(int i , int x) { while(i < n ) { c[i] += x; i += lowbit(i); } } int sum(int x) { int s = 0; while(x > 0) { s += c[x]; x -= lowbit(x); } return s; } int main() { int a, b; while(cin >> n && n) { for(int i = 0 ; i < n ; i ++)//这里不可以用while(n--),不知道为什么... { cin >> a >> b; update(a,1); update(b+1,-1); } cout << sum(1); for(int i = 2; i <= n; i++) { cout <<" " << sum(i); } cout << endl; } return 0; }