brz的雪糕

https://ac.nowcoder.com/acm/contest/8282/B
时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

蒟蒻 brz\text{brz}brz 买了 n 个雪糕进献给雪糕之王 lzy\text{lzy}lzy,但是他发现了一个难题……

雪糕之王 lzy\text{lzy}lzy 吃雪糕是很挑剔的,每次他会选一个区间 [l,r],从左到右依次吃掉雪糕,假如第 i 个吃掉的雪糕和上一个吃掉的类型相同,那么 lzy\text{lzy}lzy 的愉悦值不会提升,否则愉悦值会 +1,特别的,吃第一个雪糕时愉悦值会 +1。

蒟蒻 brz\text{brz}brz 脑补了一些 lzy\text{lzy}lzy 会吃的雪糕区间,他想要知道这些区间能带给 lzy\text{lzy}lzy 的愉悦值是否不小于 k。

输入描述:

第一行两个整数 n,k,q,n,k 意义如上所述,q 表示蒟蒻 brz\text{brz}brz 脑补的 lzy\text{lzy}lzy 可能会吃的雪糕区间。

第二行 n 个整数,第 i 个整数 aia_iai 表示第 i 个雪糕的类型。

下面 q 行每行两个整数 xi,yix_i,y_ixi,yi,表示 lzy\text{lzy}lzy 可能会吃 [xi,yi][x_i,y_i][xi,yi] 这个雪糕区间。
 
1≤k≤n≤2×106,1≤q≤5×106,1≤ai≤1091\leq k\leq n\leq 2\times 10^6,1\leq q\leq 5\times 10^6,1\leq a_i\leq 10^91kn2×106,1q5×106,1ai109。

输出描述:

输出 q 行,第 i 行表示当 lzy\text{lzy}lzy 吃的雪糕区间为 [xi,yi][x_i,y_i][xi,yi] 时,他能获得的愉悦值是否不小于 k,如果是,输出`Yes`,否则输出`No`。
示例1

输入

复制
5 4 2
1 1 2 3 2
1 4
2 5

输出

复制
No
Yes

说明

区间 [1,4] 能带来的愉悦值为 3,区间 [2,5] 能带来的愉悦值为 4。
分析:cin,cout别用用会超时,for循环暴力会超时,关了流输入也超时。
所以要在建立一个数组,记录相邻是否是不一样的并且累和,才能达到要求的时间复杂度
 1 //
 2 // Created by w on 2020/11/6.
 3 //
 4 
 5 #include<iostream>
 6 using namespace std;
 7 const int N=2e6+20;
 8 int arr1[N];
 9 int arr2[N]={0};
10 int main()
11 {
12     //ios::sync_with_stdio(false);
13     int n,k,q;
14     scanf("%d%d%d",&n,&k,&q);
15     int sum=1;
16     for(int i=1;i<=n;i++)
17     {
18         scanf("%d",&arr1[i]);
19 
20     }
21     arr2[1]=0;
22     for(int i=2;i<=n;i++)
23     {
24         if(arr1[i]==arr1[i-1])
25             arr2[i]=arr2[i-1]+1;
26         else
27             arr2[i]=arr2[i-1];
28     }
29     while(q--)
30     {
31         sum=0;
32         int m,n;
33         scanf("%d%d",&m,&n);
34         int ans=n-m+1;
35         ans-=arr2[n]-arr2[m];
36         //cout<<"sum"<<sum<<endl;
37         if(ans>=k)
38            printf("Yes\n");
39         else
40             printf("No\n");
41     }
42     return 0;
43 }

 



posted @ 2020-11-06 22:49  BlackSnow  阅读(160)  评论(0)    收藏  举报