ssoj2893: 乙女文楽(c)

【题意】每个人偶有一个编队a[i]。爱丽丝每次可以报出一个数x,然后编队为x的所有人偶都会自动出列,剩余的人偶会组成一个新的序列。

爱丽丝最多只能报k次数,她想在报数结束后的序列中,寻找到一个尽可能长的区间满足区间中所有人偶的编队都是一样的。


【思路】尺取。每次i往后找颜色种类只增不减,从j开始找完后直到颜色数为n+1,ans取max。


#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define maxn 100005
using namespace std;
int n,a[maxn],col[maxn],num=0,k,ans=0;
int get(){
    char c;while(!isdigit(c=getchar()));
    int v=c-48;while(isdigit(c=getchar()))v=v*10+c-48;
    return v;
}
void init(){
    n=get();k=get();
    memset(col,0,sizeof(col));
    for(int i=1;i<=n;++i)a[i]=get();
}
int main(){
    init();int j=1;
    for(int i=1;i<=n;++i){
	    if(col[a[i]]==0)++num;
	    ++col[a[i]];
	    while(num>k+1){
		    if(--col[a[j]]==0)--num;
		    ++j;
		}
		ans=max(ans,col[a[i]]);
	}
	printf("%d\n",ans);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值