每次修改的是一个区间,所求的值是关于某个点的;
题目来源;
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;
}