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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM