Submission #1314063

#TimeUsernameProblemLanguageResultExecution timeMemory
1314063mikolaj00 Martian DNA (BOI18_dna)C++20
100 / 100
23 ms2744 KiB
#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, k, R;
    cin >> n >> k >> R;
    vector<int> d(n+1);
    d[0] = k;
    for (int i = 1; i <= n; i++)
        cin >> d[i];

    vector<int> req(k+1);
    for (int i = 0; i < R; i++)
    {
        int b, q;
        cin >> b >> q;

        req[b] = q;
    }

    vector<int> count(k+1);
    count[k]++;

    int good = k+1 - R;
    int l = 0, r = 0;
    while (r+1 <= n)
    {
        if (good == k+1)
            break;

        int val = d[r+1];
        count[val]++;
        if (req[val] == count[val])
            good++;
        r++;
    }

    if (good < k+1)
    {
        cout << "impossible";
        return 0;
    }

    int ans = 1e9;
    while (l <= n && r <= n)
    {
        ans = min(ans, r-l+1);

        int val_l = d[l];
        if (l == r || count[val_l]-1 < req[val_l])
        {
            if (r == n)
                break;

            r++;
            int val_r = d[r];
            count[val_r]++;
        }
        else
        {
            count[val_l]--;
            l++;
        }
    }

    cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...