B题:简单的前缀和问题
唯一的坑是输入量较大,需采用scanf输入。
设sum[i]代表从1~i中所有异于前者的雪糕数量。
所以区间[x,y]的愉悦值就等于 sum[y]-sum[x]+1
加1 是因为吃第一个雪糕时愉悦值也会加1。
代码如下:
#include <iostream> using namespace std; const int maxn=2000005; int a[maxn]; int sum[maxn]; int n,k,q,x,y; int main(){ scanf("%d%d%d",&n,&k,&q); // cin>>n>>k>>q; for(int i=1;i<=n;i++)cin>>a[i]; sum[1]=0; for(int i=2;i<=n;i++) if(a[i]!=a[i-1])sum[i]=sum[i-1]+1; else sum[i]=sum[i-1]; while(q--){ scanf("%d%d",&x,&y); //cin>>x>>y; if(sum[y]-sum[x]+1>=k) printf("Yes\n"); else printf("No\n"); } return 0; }