#include <bits/stdc++.h>
using namespace std;
const int INF = 1e8;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, k, r;
cin >> n >> k >> r;
vector<int> arr(n);
vector<int> req(k+1,0);
int requiredNum = 0;
for(int i=0; i<n; ++i) cin >> arr[i];
for(int i=0; i<r; ++i){
int type, num;
cin >> type >> num;
req[type]=num;
requiredNum+=num;
}
//two-pointers
int start = -1;
int toObtain = requiredNum;
vector<int> obtained(k+1,0);
int ans = INF;
for(int end = 0; end < n; ++end){
while(start < n-1 && toObtain > 0){
start++;
int curr = arr[start];
obtained[curr]++;
if(obtained[curr] <= req[curr]) toObtain--;
}
if(toObtain == 0){
ans = min(ans, start-end+1);
}
int curr = arr[end];
if(req[curr] != 0 && obtained[curr] == req[curr]) toObtain++;
obtained[arr[end]]--;
}
if(ans == INF) cout << "impossible\n";
else cout << ans << "\n";
return 0;
}
| # | 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... |