#include <iostream>
#include <set>
#include <vector>
using namespace std;
const int N = 1<<18;
vector<int> occ[N];
int id[N], Cur[N], a[N], tm[N];
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
int n, m, k, Ans = N;
cin>>n>>m>>k;
for (int i=1;i<=n;i++){
cin>>a[i];
id[i] = occ[a[i]].size();
occ[a[i]].push_back(i);
}
multiset<int> ms;
for (int i=1;i<=k;i++){
int c;
cin>>c;
cin>>tm[c];
Cur[c] = n + 1;
ms.insert(n + 1);
}
for (int i=n;i>=1;i--){
if (tm[a[i]] == 0)
continue;
if (id[i] + tm[a[i]] <= occ[a[i]].size()){
ms.erase(ms.find(Cur[a[i]]));
Cur[a[i]] = occ[a[i]][id[i] + tm[a[i]] - 1];
ms.insert(Cur[a[i]]);
}
if (*rbegin(ms) <= n)
Ans = min(Ans, *rbegin(ms) - i + 1);
}
if (Ans == N)
cout<<"impossible\n";
else
cout<<Ans<<'\n';
}
| # | 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... |