Submission #1314064

#TimeUsernameProblemLanguageResultExecution timeMemory
1314064cleimek Martian DNA (BOI18_dna)C++20
100 / 100
23 ms2764 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...