https://www.acmicpc.net/problem/20922
20922번: 겹치는 건 싫어
홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 $K$개 이하로 들어 있는 최장 연속 부분 수열
www.acmicpc.net
#include<iostream>
using namespace std;
int N, K;
int cnt[100005];
int arr[200005];
int main() {
cin.tie(nullptr); ios::sync_with_stdio(false);
cin >> N >> K;
for (int i = 1; i <= N; ++i)
cin >> arr[i];
int start = 1, end = 1;
int ans = 0;
while (end <= N && start <= end) {
while (end <= N && cnt[arr[end]] <= K) {
if (cnt[arr[end]] == K)
break;
cnt[arr[end]]++;
ans = max(ans, end - start + 1);
++end;
}
while (start < end) {
if (cnt[arr[start]] == K) {
--cnt[arr[start++]];
break;
}
--cnt[arr[start++]];
}
}
cout << ans << '\n';
return 0;
}