| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1301509 | josiftepe | Martian DNA (BOI18_dna) | C11 | 0 ms | 0 KiB |
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int INF = 2e9;
int main() {
ios_base::sync_with_stdio(false);
int n, k, r;
cin >> n >> k >> r;
vector<int> v(n);
for(int i = 0; i < n; i++) {
cin >> v[i];
}
vector<int> req(k + 1, 0);
for(int i = 0; i < r; i++) {
int A, B;
cin >> A >> B;
req[A] = B;
}
int i = 0, j = 0;
int res = INF;
vector<int> cnt(k + 1, 0);
int satisfied_req = 0;
while(j < n) {
if(satisfied_req < r) {
if(req[v[j]] > 0) {
if(cnt[v[j]] + 1 == req[v[j]]) {
satisfied_req++;
}
cnt[v[j]]++;
}
j++;
}
else {
if(req[v[i]] > 0) {
if(cnt[v[i]] - 1 < req[v[i]]) {
satisfied_req--;
}
cnt[v[i]]--;
}
i++;
}
if(satisfied_req == r) {
res = min(res, j - i);
}
}
if(res == INF) {
cout << "impossible" << endl;
}
else {
cout << res << endl;
}
return 0;
}
/*
5 2 2
0 1 1 0 1
0 1
1 1
13 4 3
1 1 3 2 0 1 2 0 0 0 0 3 1
0 2
2 1
1 2
5 3 1
1 2 0 1 2
0 2
*/
