//#pragma GCC target ("avx2")   
//#pragma GCC optimize ("Ofast")   
#include <bits/stdc++.h>   
using namespace std;  
#define int long long  
#define F first 
#define S second 
#define pb push_back 
const int N = 1e6+100, NN = 26;
const int mod = 1e9+7;
//int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); }
//int lcm(int a, int b) { return a / gcd(a, b) * b; }
//int binpow(int a,int b){if(!b)return 1; if(b&1)return a*binpow(a,b-1)%mod; int x=binpow(a,b/2); return x*x%mod;}
signed main(){   
    ios_base::sync_with_stdio(0);   
    cin.tie(0);   
    cout.tie(0);
    int n, k, q;
    cin >> n >> k >> q;
    int a[n+1];
    map < int, int > mp, mp2;
    for(int i=1;i<=n;i++){
        cin >> a[i];
        mp[a[i]]++;
    }
    bool b=0;
    for(int i=1;i<=q;i++){
        int f, ff;
        cin >> f >> ff;
        mp2[f]=ff;
        if(mp[f]<ff){
            b=1;
        }
    }
    if(b==1){
        cout << "impossible";
        return 0;
    }
    mp.clear();
    int ans=n;
    int l=1, r=n;
    int cnt=0;
    for(int i=1;i<=n;i++){
        if(mp2[a[i]]!=0){
            if(mp[a[i]]>=mp2[a[i]]){
                bool b2=0;
                mp[a[i]]++;
                while(l<i){
                    if(mp[a[l]]-mp2[a[l]]<=0) break;
                    else{
                        mp[a[l]]--;
                        l++;
                        b2=1;
                    }
                }
                if(b2==1) r=i;
            }
            else{
                r=i;
                mp[a[i]]++;
                if(mp[a[i]]==mp2[a[i]]) cnt++;
            }
        }
        if(cnt==q) ans=min(ans, r-l+1);
    }
    cout << ans;
}   
| # | 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... |