題目鏈接
Solution
尺取法板子,算是復習一波.
題中說最多刪除 \(k\) 種,那么其實就是找一個顏色種類最多為 \(k+1\) 的區間;
統計一下其中最多的顏色出現次數.
然后直接尺取法,然后每次對于 \(col[r]\) 進行統計,時間復雜度 \(O(n)\) .
Code
#include<bits/stdc++.h>
using namespace std;
const int maxn=100008;int ans;
int n,k,col[maxn];
map <int,int>js;int main()
{scanf("%d%d",&n,&k);for(int i=1;i<=n;i++)scanf("%d",&col[i]);int now=0,l=1,r=0;while(r<=n){r++;if(!js[col[r]])now++;js[col[r]]++;while(now==k+2){js[col[l]]--;if(!js[col[l]])now--;l++;}ans=max(ans,js[col[r]]);}cout<<ans<<endl;
}