AcWing 570. 气球游戏
原题链接
中等
作者:
Freya
,
2020-03-17 15:53:18
,
所有人可见
,
阅读 932
#include <iostream>
#include <set>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e6 + 10, M = 2010;
int n, m;
int gun[N], num[M];
int main() {
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i++) scanf("%d", &gun[i]);
set<int> s;
int res = N;
for(int i = 0, j = 0; i < n; i++) {
int t = gun[i];
if(t == 0) continue;
s.insert(t);
num[t]++;
if(s.size() == m) {
for(; j < i; j++)
if(--num[gun[j]] == 0) {
num[gun[j]]++;
break;
}
res = min(res, i - j + 1);
}
}
if(res == N) cout << -1 << endl;
else cout << res << endl;
return 0;
}