This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main()
{
    int N, K, R;
    cin >> N >> K >> R;
    
    int D[N+1];
    for(int i = 1; i <= N; i++) cin >> D[i];
    
    vector<int> req(K, 0);
    vector<int> act(K, 0);
    int a, r, b;
    for(int i = 1; i <= R; i++)
    {
        cin >> a >> r;
        req[a] = r;
    }
    a = 1;
    int g = 0;
    int res = 2000000000;
    for(int i = 0; i < K; i++) g += req[i] == 0;
    for(b = 1; b <= N && g < K; b++) 
    {
        act[D[b]]++;
        if(req[D[b]] == act[D[b]]) g++;
    }
    b--;
    if(g == K) res = b;
    for(int a = 2; a <= N; a++)
    {
        act[D[a-1]]--;
        if(act[D[a-1]] == req[D[a-1]] - 1) g--;
        
        for(b++; b <= N && g < K; b++) 
        {
            act[D[b]]++;
            if(req[D[b]] == act[D[b]]) g++;
        }
        b--;
        if(g == K) res = min(res, b-a+1);
    }
    
    if(res == 2000000000) cout << "impossible\n";
    else cout << res << '\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... |