제출 #1132558

#제출 시각아이디문제언어결과실행 시간메모리
1132558codexistent Martian DNA (BOI18_dna)C++20
100 / 100
98 ms17544 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAXNRK 200005
#define FOR(i, a, b) for(ll i = a; i <= b; i++)
#define f first
#define s second

ll n, k, r, b[MAXNRK], tidx[MAXNRK], rq[MAXNRK];
vector<ll> toc[MAXNRK];
stack<ll> st;
ll ans = LLONG_MAX;

void printans(){
    if(ans == LLONG_MAX) cout << "impossible" << endl;
    else cout << ans << endl;
}

int main(){
    cin >> n >> k >> r;
    FOR(i, 1, n) {
        cin >> b[i];
        toc[b[i]].push_back(i);
        rq[i - 1] = 0, tidx[i - 1] = -1;

        if(i <= k) st.push(i - 1);
    }
    FOR(i, 1, r){
        ll x; cin >> x;
        cin >> rq[x];
    }

    ll i2 = 0;
    FOR(i, 1, n){
        while(st.size()){
            ll sti = st.top(); st.pop();
            while(rq[sti] > 0){
                if(tidx[sti] + 1 >= toc[sti].size()){
                    printans();
                    return 0;
                }
                rq[sti]--;

                tidx[sti]++;
                i2 = max(i2, toc[sti][tidx[sti]]);
            }
        }

        ans = min(ans, 1 + i2 - i);

        rq[b[i]]++; 
        st.push(b[i]);
    }
    printans();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...