#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
using namespace std;
// using namespace __gnu_pbds;
#define pb push_back
#define ins insert
#define fi first
#define se second
// #define endl "\n"
#define ALL(x) x.begin(), x.end()
#define intt long long
const intt mod = 1e9 + 7;
const intt base = 9973;
const intt inf = 1e18;
const intt mxN = 5e5 + 5;
const intt L = 21;
void solve() {
intt N, K, R, maks = 0, mecbur = -1;
cin >> N >> K >> R;
vector<intt> A(N), REQ(K);
set<intt> st;
for(auto &a : A) cin >> a;
for(intt i = 0; i < R; i++) {
intt num, cnt;
cin >> num >> cnt;
REQ[num] = cnt;
st.insert(num);
}
vector<vector<intt>>pos(K, vector<intt>{});
for(intt i = 0; i < N; i++) {
pos[A[i]].pb(i);
}
vector<vector<intt>>rb(K, vector<intt>{});
for(intt num : st) {
rb[num].resize(pos[num].size());
for(intt i = 0; i < pos[num].size(); i++) {
if(REQ[num] == 0) {
rb[num][i] = 0;
} else {
if(i + REQ[num] - 1 < (intt)pos[num].size()) {
rb[num][i] = pos[num][i + REQ[num] - 1];
} else {
rb[num][i] = inf;
}
}
}
}
// for(intt num : st) {
// cout << num << ": ";
// for(intt k : rb[num]) {
// cout << k << " ";
// }
// cout << endl;
// }
intt ans = inf;
for(intt num : st) {
if(REQ[num] == 0) continue;
maks = max(maks, rb[num][0]);
}
if(maks == inf) {
cout << "impossible" << endl;
return;
}
// cout << maks << endl;
ans = min(ans, maks);
vector<intt> cur(K, 0);
for(intt i = 0; i < N; i++) {
if(i)
ans = min(ans, maks - i);
// if(ans == 4) {
// cout << i << ": " << ans << " " << maks << endl;
// }
if(st.find(A[i]) != st.end()) {
cur[A[i]]++;
intt newidx = cur[A[i]];
if(rb[A[i]][newidx] == inf || newidx == rb[A[i]].size()) {
break;
}
maks = max(maks, rb[A[i]][newidx]);
}
}
cout << ans+1 << endl;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
intt tst = 1;
// cin >> tst;
while(tst--) {
solve();
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |