前缀和
我们定义一个sum[i]表示1到i一共可以加多少愉悦值,那么这个题目就变成了一个前缀和的问题了,但是要注意的是,题目说吃第一个雪糕的时候可以加1,那么我们只需要在最后的时候加一个1就行。
因为数据很大,所以建议scanf输入,并且暴力的话只能过三分之二的样例
AC代码
#include <iostream> #include <algorithm> #include <cstdio> #include <set> #include <map> #include <math.h> #include <vector> #include <queue> #include <string.h> typedef long long ll; using namespace std; #define pi acos(-1.0) const int maxn = 5e6 + 10; const int inf = 0x3f3f3f3f; const int mod = 1e9 + 7; int a[maxn], sum[maxn]; int main() { int n, k, q; scanf("%d%d%d", &n, &k, &q); for (int i = 1; i <= n; ++i) scanf("%d", &a[i]); sum[1] = 1; for (int i = 2; i <= n; ++i) if (a[i - 1] != a[i]) sum[i] = sum[i - 1] + 1; else sum[i] = sum[i - 1]; for (int i = 1; i <= q; ++i) { int l, r; scanf("%d%d", &l, &r); ll cnt = sum[r] - sum[l] + 1; if (cnt >= k) puts("Yes"); else puts("No"); } }