题目描述
思路:用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块雪糕获得的愉悦值