Karen and Coffee题解

题目传送门

这道题呢,我们用差分来实现,

这道题的目的就是去统计区间内,满足条件的温度总数

区间总数问题使用前缀和实现:

12345
01101

将满足的标为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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值