https://ac.nowcoder.com/acm/contest/57359/G
双端队列维护区间
#include<bits/stdc++.h>
using namespace std;
int cnt[5]={0};
int main(){
int n,k;
cin>>n>>k;
deque<int> q;
int ans=n;
while(n--){
int x;
cin>>x;
cnt[x]++;
q.push_back(x);
while(cnt[1]>0&&cnt[2]>0&&cnt[3]>0&&cnt[4]>=k){
ans=min(ans,(int)q.size());
cnt[q.front()]--;
q.pop_front();
}
}
cout<<ans;
}