嗨嗨嗨,我又来了哦~
今天起的有点早,闲的没事水道题。
要问质量好不好,题目你底要选好。
前缀和,与差分。
加点解析完成它。
卡润俺的靠夫诶,今天题解就是它。
废话少说,先看题目
题目传送门
解析
这道题实在简单,可以参考一下我的
前缀和与差分
接下来我们只需要先维护差分数组,以及处理+x问题,接下来循环判断是否符合条件,以及 a 1 a_1 a1一直到 a i a_i ai所有满足条件数量。接下来接受询问,输出x-y符合条件的数据(前缀和思路与处理)。
具体看代码。
代码
#include<iostream>
//#include<bits/stdc++.h>
using namespace std;//上述为万能头文件
int a[200005],b[200005],c[200005];//输入数据数组,差分,前缀和。
int main()
{
int n,k,q;
cin>>n>>k>>q;//。。。
for(int i=0;i<n;i++)
{
int l,r;
cin>>l>>r;//输入数据
//这里根据差分与前缀和的性质进行快速处理
a[l]++; //之后+1
a[r+1]--;//之后-1(抵消)
}
for(int i=1;i<=200005;i++)//直接将范围调到最大即可,不需要maxn
{//核心步骤!非常关键!!!
b[i]=b[i-1]+a[i];//这是前缀和处理
if(b[i]>=k) c[i]=c[i-1]+1;//如果符合要求,就将从1-i满足条件数量+1(前缀和思路)
else c[i]=c[i-1];//否则满足条件数量依旧不变。
}//直接将前缀和与差分和判断在一块处理!
while(q--)//开始询问
{
int x,y;//l,r
cin>>x>>y;//输入询问数据
cout<<c[y]-c[x-1]<<endl;//前缀和的性质不用我多说了吧。
}
return 0;//结束完毕撒花!
}
就结束了。
点赞,关注?评论!