题目描述
思路:用dp[i]表示吃掉第1块雪糕到第i块雪糕获得的愉悦值
再dp[r]-dp[l-1]与k比较就可以了
值得注意的是吃第1块雪糕愉悦值为1,如果dp[l]=dp[l-1],相当于吃第一块雪糕愉悦值为0
这种情况ans要+1
AC代码
#include <bits/stdc++.h>
using namespace std;
int dp[2000008];//dp[i]表示吃掉第1块雪糕到第i块雪糕获得的愉悦值
int main()
{
int n,m,k,x,pre;
scanf("%d%d%d",&n,&k,&m);
dp[0]=0;
for(int i=1; i<=n; ++i)
{
scanf("%d",&x);
if(i==1)
{
dp[i]=1;
continue;
}
if(pre!=x)//判断与前一个数是否相等
dp[i]=dp[i-1]+1;
else
dp[i]=dp[i-1];
pre=x;
}
while(m--)
{
int a,b,an;
scanf("%d%d",&a,&b);
an=dp[b]-dp[a-1];
if(dp[a]==dp[a-1])//吃第1块雪糕愉悦值为1,如果dp[a]=dp[a-1]
an++; //相当于吃第一块雪糕愉悦值为0
if(an>=k)
puts("Yes");
else
puts("No");
}
}
//dp[i]表示吃掉第1块雪糕到第i块雪糕获得的愉悦值

京公网安备 11010502036488号