E题
nlogn
,
l’<l
E题代码
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
const int maxn = 1e5+5;
#define dbg(x) cout<<#x<<" :"<<x<<endl;
int a[maxn];
map<int,vector<int> > mm;
map<int,int> pre;
map<pair<int,int>,int> sum;
int main()
{
int n,k;
int ans=0;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++) mm[a[i]].push_back(i);
for(int i=1;i<=n;i++)
{
sum[pair<int,int>(a[i],i)]=sum[pair<int,int>(a[i],pre[a[i]])]+1;
pre[a[i]]=i;
}
map<int,vector<int> >::iterator it;
for(it=mm.begin();it!=mm.end();++it)
{
int tmp=it->first;
int sz=(it->second).size();
if(sz<=1) continue;
for(int i=0;i<sz;i++)
{
int l=0,r=i,mid;
int rr=mm[tmp][i];
while(l<=r)
{
mid=(l+r)>>1;
if((rr-mm[tmp][mid]+1)-(sum[pair<int,int>(tmp,rr)]-sum[pair<int,int>(tmp,mm[tmp][mid])]+1)<=k) r=mid-1;
else l=mid+1;
}
ans=max(ans,sum[pair<int,int>(tmp,mm[tmp][i])]-sum[pair<int,int>(tmp,mm[tmp][l])]+1);
}
}
printf("%d\n",ans);
return 0;
}