题目传送门
这道题呢,我们用差分来实现,
这道题的目的就是去统计区间内,满足条件的温度总数
区间总数问题使用前缀和实现:
1 | 2 | 3 | 4 | 5 |
0 | 1 | 1 | 0 | 1 |
将满足的标为1,不满足的标为0,进行求和,总和即总和个数
判断温度是否是可接受的? 该温度的推荐食谱数量≥k
获取的信息:每个温度被几个食谱所推荐
湿度 – 食谱数量
cnt[温度]=推荐的食谱数量
在区间内每个温度的数量加一
1. 根据每本食谱给出的温度范围
1. 利用差分,将L-R每个温度食谱数量都加一
1. 求出每个温度的食谱数量
2. 每个温度判断 是否是可接受温度
3. 利用前缀和,统计区间内的满足条件的元素总数
这道题的整体思路就是这样,
所以呢,上AC代码:
#include <bits/stdc++.h>
#define ll long long
#define f(a) for(int i=1;i<=a;i++)
using namespace std;
const ll N=2e5+5;
ll cnt[N],b[N],s[N];
int main()
{
int n,k,p,l,r;
cin>>n>>k>>p;
f(n)
{
cin>>l>>r;
b[l]++;
b[r+1]--;
}
f(N-5)
{
cnt[i]=cnt[i-1]+b[i];
}
f(N-5)
{
s[i]=s[i-1];
if(cnt[i]>=k)s[i]+=1 ;
}
f(p)
{
cin>>l>>r;
cout<<s[r]-s[l-1]<<endl;
}
return 0;
}