思路:
先记录温度前缀和:如果是开头温度,b【l】+1,如果是结尾,b【r】+1。然后用a数组统计前缀和。接着用sum数组记录温度对应的咖啡数量前缀和。最后不断输出要求范围内的咖啡数量。
代码:
#include<iostream>
using namespace std;
int sum[200005];
Int a[200005],b[200005];
int l,r,n,k,q;
int main(){
cin>>n>>k>>q;
for(int i=1;i<=n;i++){
cin>>l>>r;
b[l]++;
b[r+1]--;
}
for(int i=1;i<=200000;i++){//咖啡的最大数量
a[i]=a[i-1]+b[i];
}
for(int i=1;i<=200000;i++){
if(a[i]>=k){//当前温度下的咖啡数量
sum[i]=sum[i-1]+1;
}else{
sum[i]=sum[i-1];
}
}
while(q--){
cin>>l>>r;
cout<<sum[r]-sum[l-1]<<endl;
}
return 0;
}