#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXNRK 200005
#define FOR(i, a, b) for(ll i = a; i <= b; i++)
#define f first
#define s second
ll n, k, r, b[MAXNRK], tidx[MAXNRK], rq[MAXNRK];
vector<ll> toc[MAXNRK];
stack<ll> st;
ll ans = LLONG_MAX;
void printans(){
if(ans == LLONG_MAX) cout << "impossible" << endl;
else cout << ans << endl;
}
int main(){
cin >> n >> k >> r;
FOR(i, 1, n) {
cin >> b[i];
toc[b[i]].push_back(i);
rq[i - 1] = 0, tidx[i - 1] = -1;
if(i <= k) st.push(i - 1);
}
FOR(i, 1, r){
ll x; cin >> x;
cin >> rq[x];
}
ll i2 = 0;
FOR(i, 1, n){
while(st.size()){
ll sti = st.top(); st.pop();
while(rq[sti] > 0){
if(tidx[sti] + 1 >= toc[sti].size()){
printans();
return 0;
}
rq[sti]--;
tidx[sti]++;
i2 = max(i2, toc[sti][tidx[sti]]);
}
}
ans = min(ans, 1 + i2 - i);
rq[b[i]]++;
st.push(b[i]);
}
printans();
}
# | 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... |