HDU 1566 Color the ball(树状数组)

题目链接

对这个知识不熟啊。。。。自己找了一篇论文,上边一个题,貌似和这个差不多,谁知一点都不一样,怎么也不理解如何通过更改a b之间的全部+1,通过树状数组中更新数组的a和b+1,来操作。。。。实在理解了不了,看了解题报告发现和论文上的题,不一样啊。。。只需要insert(a,1)和insert(b+1,-1)就好了,瞬间我被秒了,意义马上就理解了。。。

 1 #include <stdio.h>

 2 #include <string.h>

 3 #define N 100001

 4 int p[N],n;

 5 int lowbit(int t)

 6 {

 7     return t&(-t);

 8 }

 9 void insert(int t,int d)

10 {

11     while(t <= n)

12     {

13         p[t] += d;

14         t += lowbit(t);

15     }

16 }

17 int getsum(int t)

18 {

19     int sum = 0;

20     while(t > 0)

21     {

22         sum += p[t];

23         t -= lowbit(t);

24     }

25     return sum;

26 }

27 int main()

28 {

29     int a,b,i,sum;

30     while(scanf("%d",&n)!=EOF)

31     {

32         memset(p,0,sizeof(p));

33         if(!n) break;

34         for(i = 1; i <= n; i ++)

35         {

36             scanf("%d%d",&a,&b);

37             insert(a,1);

38             insert(b+1,-1);

39         }

40         for(i = 1; i <= n; i ++)

41         {

42             sum = getsum(i);

43             if(i == 1)

44                 printf("%d",sum);

45             else

46                 printf(" %d",sum);

47         }

48         printf("\n");

49     }

50     return 0;

51 }

你可能感兴趣的:(color)