Submission #1330797

#TimeUsernameProblemLanguageResultExecution timeMemory
1330797miminyte Martian DNA (BOI18_dna)C++20
100 / 100
76 ms2728 KiB
#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n, k, R;
    cin >> n >> k >> R;

    vector <int> v(n);

    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }

    vector<int> min_count(k, 0);
    int tp1, tp2;

    for(int i=0;i<R;i++) {
        cin >> tp1 >> tp2;

        min_count[tp1] = max(min_count[tp1], tp2);
    }

    vector<int> count(k, 0);
    count[v[0]] = 1;

    int ok_count = 0;

    for(int i=0;i<k;i++) {
        if(count[i] >= min_count[i]) {
            ok_count++;
        }
    }

    int l = 0, r = 0;

    int res = 1<<29;

    while(true) {
        if(ok_count == k) {
            res = min(res, r - l + 1);

            count[v[l]]--;
            if(count[v[l]] == min_count[v[l]] - 1) {
                ok_count--;
            }

            l++;
            continue;
        }

        r++;
        
        if(r == n) {
            break;
        }

        count[v[r]]++;
        if(count[v[r]] == min_count[v[r]]) {
            ok_count++;
        }
    }

    if(res == 1<<29) {
        cout << "impossible";
    } else {
        cout << res;
    }



    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...