Codeforces Round #419 (Div. 2)(B)差分数组

传送门:Problem B

https://www.cnblogs.com/violet-acmer/p/9721160.html

题意:

  Karen有n个关于煮咖啡的食谱,每个食谱都有个煮咖啡的最适宜的温度范围,给你 m 个操作,每个操作都是个温度区间,问在此区间内满足条件的温度个数。

  需要满足的条件为:在温度 T 时,在n个食谱中查找最宜温度包含T的食谱个数,只有当食谱个数 >= k 时,此温度才算可以计入答案。 

题解:

  差分数组

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn=2e5+10;
 6 
 7 int n,k,q;
 8 int diff[maxn];
 9 int sum[maxn];
10 int need[maxn];
11 
12 void init()
13 {
14     memset(diff,0,sizeof(diff));
15     memset(sum,0,sizeof(sum));
16     memset(need,0,sizeof(need));
17 }
18 
19 int main()
20 {
21     init();
22     scanf("%d%d%d",&n,&k,&q);
23     int maxP=0;
24     int minP=0;
25     for(int i=1;i <= n;++i)
26     {
27         int a,b;
28         scanf("%d%d",&a,&b);
29         diff[a] += 1;
30         diff[b+1] -= 1;
31     }
32 
33     for(int i=1;i < maxn;++i)
34     {
35         need[i]=need[i-1]+diff[i];
36         sum[i]=(need[i] >= k ? 1:0)+sum[i-1];
37     }
38     for(int i=1;i <= q;++i)
39     {
40         int a,b;
41         scanf("%d%d",&a,&b);
42         printf("%d\n",sum[b]-sum[a-1]);
43     }
44 }
View Code

 

posted @ 2018-09-28 21:52  HHHyacinth  阅读(161)  评论(0编辑  收藏  举报