Submission #1354978

#TimeUsernameProblemLanguageResultExecution timeMemory
1354978mxhrvsGift Boxes (EGOI25_giftboxes)C++20
100 / 100
91 ms16068 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

ll rx, lx;
ll r, l; 
void check() {
    if (rx - lx < r - l) {
        r = rx;
        l = lx;
    }
}

int main() {
    ll t, n;
    cin >> t >> n;

    l = 0;
    r = n - 1;

    vector<ll> suff(t + 1, -1), pref(t + 1, -1), cnt(t + 1, 0);
    vector<ll> a(n);

    for (ll i = 0; i < n; i++) {
        cin >> a[i];
        if (pref[a[i]] == -1) pref[a[i]] = i;
        suff[a[i]] = i;
    }

    ll mxl = 0;
    for (ll i = 0; i < n; i++) {
        if (cnt[a[i]] != 0) break;
        cnt[a[i]]++;
        mxl++;
    }

    fill(cnt.begin(), cnt.end(), 0);

    ll mxr = n - 1;
    for (ll i = n - 1; i >= 0; i--) {
        if (cnt[a[i]] != 0) break;
        cnt[a[i]]++;
        mxr--;
    }

    rx = mxr;
    lx = 0; 
    rx = mxr; 
    for (ll i = 0; i < mxl; i++) {
        lx = i + 1;
        rx = max(rx, (ll)suff[a[i]]);
        if(rx >= n) rx = n - 1; 
        check();
    }

    lx = mxl;
    for (ll i = n - 1; i > mxr; i--) {
        rx = i - 1;
        lx = min(lx, (ll)pref[a[i]]);
        if(lx < 0) lx = 0; 
        check();
    }

    if (mxl == n) {
        cout << "0 0" << endl;
    } else {
        cout << l << " " << r << endl;
    }

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