Codeforces Round #419 (Div. 2)(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 }