Submission #299306

#TimeUsernameProblemLanguageResultExecution timeMemory
299306dolphingarlic Martian DNA (BOI18_dna)C++14
100 / 100
68 ms4728 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#define FOR(i, x, y) for (int i = x; i < y; i++)
#define MOD 1000000007
typedef long long ll;
using namespace std;

int n, k, r;
int a[200001], req[200001], cnt[200001];

bool check(int len) {
    int num_fulfilled = 0;
    fill(cnt, cnt + n, 0);
    FOR(i, 0, len) {
        cnt[a[i]]++;
        if (cnt[a[i]] == req[a[i]]) num_fulfilled++;
    }
    if (num_fulfilled == r) return true;

    FOR(i, len, n) {
        if (cnt[a[i - len]] == req[a[i - len]]) num_fulfilled--;
        cnt[a[i - len]]--;
        cnt[a[i]]++;
        if (cnt[a[i]] == req[a[i]]) num_fulfilled++;

        if (num_fulfilled == r) return true;
    }
    return false;
}

int main() {
    iostream::sync_with_stdio(false);
    cin.tie(0);

    cin >> n >> k >> r;
    FOR(i, 0, n) cin >> a[i];
    FOR(i, 0, r) {
        int x;
        cin >> x >> req[x];
    }

    int l = 1, r = n;
    while (l != r) {
        int mid = (l + r) / 2;

        if (check(mid)) r = mid;
        else l = mid + 1;
    }

    if (check(n)) cout << l << '\n';
    else cout << "impossible\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...