题目
怕又是一道单调队列的题。。。
之前考过,过来A一发。
#include<bits/stdc++.h>
#include<set>
using namespace std;
long long l,r,ans,n,k,tot;
map<long long,long long>mp;
long long flag[100010],a[100010];
long long q[100010];
int main()
{
freopen("line.in","r",stdin);
freopen("line.out","w",stdout);
cin>>n>>k;
for (long long i=1;i<=n;i++)
{
cin>>a[i];
if (!mp[a[i]]) mp[a[i]]=++tot;
a[i]=mp[a[i]];
}
l=1;r=0;
long long kind=0,i=0;
while (i<n)
{
while (i<n&&kind<=k)
{
q[++r]=a[++i];
if (!flag[a[i]]) kind++;
flag[a[i]]++;
ans=max(ans,flag[a[i]]);
}
while (kind==k+1&&i<n)
{
if (!flag[a[i+1]]) break;
q[++r]=a[++i];
flag[a[i]]++;
ans=max(ans,flag[a[i]]);
}
if (flag[q[l]]==1) kind--;
flag[q[l]]--;
l++;
}
cout<<ans;
}
map离散化