NC213248. brz的雪糕
描述
输入描述
第一行两个整数 n,k,q,n,k 意义如上所述,q 表示蒟蒻 脑补的 可能会吃的雪糕区间。
第二行 n 个整数,第 i 个整数 表示第 i 个雪糕的类型。下面 q 行每行两个整数 ,表示 可能会吃 这个雪糕区间。。
输出描述
输出 q 行,第 i 行表示当 吃的雪糕区间为 时,他能获得的愉悦值是否不小于 k,如果是,输出`Yes`,否则输出`No`。
示例1
输入:
5 4 2 1 1 2 3 2 1 4 2 5
输出:
No Yes
说明:
区间 [1,4] 能带来的愉悦值为 3,区间 [2,5] 能带来的愉悦值为 4。C(clang11) 解法, 执行用时: 866ms, 内存消耗: 22896K, 提交时间: 2020-11-06 19:52:34
#include<stdio.h> int a[2000001],b[2000001]; int main(){ int n,m,k,x,y,i,j; scanf("%d%d%d",&n,&k,&m); for(i=1;i<=n;i++){ scanf("%d",&a[i]); b[i]=i!=1?b[i-1]+(a[i]!=a[i-1]):0; } while(m--){ scanf("%d %d",&i,&j); printf(b[j]-b[i]+1>=k?"Yes\n":"No\n"); } return 0; }
C++(clang++11) 解法, 执行用时: 1103ms, 内存消耗: 15176K, 提交时间: 2020-11-06 19:18:58
#include<bits/stdc++.h> using namespace std; int n,k,q,a,b,d[2222222]; int main(){ scanf("%d%d%d",&n,&k,&q); for(int i=1;i<=n;i++){ scanf("%d",&b); d[i]=d[i-1]+(a==b?0:1); a=b; } while(q--){ scanf("%d%d",&a,&b); puts(d[b]-d[a]+1<k?"No":"Yes"); } return 0; }