比赛时遇见了个二维差分,很可惜没看出来,还想用线段树维护,wtcl。痛心之余,回来补一补差分。

  差分一般用来解决区间操作,而区间操作当然可以用线段树写,但相比较下,差分更好实现而且更快,不过差分只能处理离线问题,不能一边更新一边查询。

  差分的思想很简单,我们要在一个区间[l,r]内都加上一个数a,那么像树状数组去区间更新一样,我们弄一个差分数组,在dif[l]处+a,在dif[r+1]处-a,这样像前缀和一样扫过l到r这个区间时,在l处开始有+a,+a对[l,r]区间产生影响,在r+1处-a变回原来的值,对r+1后面的区间没有了影响

Color the ball HDU - 1556 

  题目大意:n个点,n次操作,每次对一个区间涂色,最后问每个点被涂了多少次。

 1 #include<cstdio>
 2 const int N=100118;
 3 int cov[N],l,r;
 4 int main()
 5 {
 6     int n;
 7     while(scanf("%d",&n)&&n)
 8     {
 9         for(int i=1;i<=n;i++)
10             cov[i]=0;
11         for(int i=1;i<=n;i++)
12         {
13             scanf("%d%d",&l,&r);
14             cov[l]++;
15             cov[r+1]--;
16         }
17         for(int i=1;i<=n;i++)
18         {
19             if(i>1)
20                 printf(" ");
21             cov[i]+=cov[i-1];
22             printf("%d",cov[i]);
23         }
24         printf("\n");
25     }
26     return 0; 
27 } 
气球涂呀涂

相关文章:

  • 2022-12-23
  • 2021-04-10
  • 2022-12-23
  • 2022-12-23
  • 2021-10-25
  • 2021-12-10
  • 2022-12-23
猜你喜欢
  • 2021-08-09
  • 2022-01-27
  • 2022-12-23
  • 2022-12-23
  • 2022-02-23
  • 2021-07-10
相关资源
相似解决方案