#include <algorithm>
#include <bitset>
#include <cstdint>
#include <cstring>
#include <iostream>
#include <limits.h>
#include <math.h>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#include <chrono>
//#define int long long
#define loop(X, N) for(int X = 0; X < (N); X++)
#define all(V) V.begin(), V.end()
#define rall(V) V.rbegin(), V.rend()
using namespace std;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef vector<vector<ii>> vvii;
typedef vector<bool> vb;
typedef vector<vector<bool>> vvb;
int main() {
    int n, k, r;
    cin >> n >> k >> r;
    vi dna(n);
    loop(i, n)
        cin >> dna[i];
    vi requirements(k);
    loop(i, r) {
        int b, q;
        cin >> b >> q;
        requirements[b] = q;
    }
    int best = INT_MAX;
    int rPtr = 0;
    int reqSat = 0;
    vi freq(k);
    loop(i, n) {
        while (rPtr < n && reqSat < r) {
            int base = dna[rPtr];
            freq[base]++;
            if (requirements[base] == freq[base])
                reqSat++;
                rPtr++;
        }
        if (reqSat == r)
            best = min(best, rPtr - i);
        int base = dna[i];
        if (requirements[base] == freq[base])
            reqSat--;
        freq[base]--;
    }
    if (best == INT_MAX)
        cout << "impossible" << endl;
    else
        cout << best << endl;
    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... |