Submission #1355046

#TimeUsernameProblemLanguageResultExecution timeMemory
1355046AMel0nGift Boxes (EGOI25_giftboxes)C++20
100 / 100
98 ms25592 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define FOR(i,N) for(ll i = 0; i < N; i++)
#define all(x) (x).begin(), (x).end()
#define F first
#define S second

// Gift Boxes

signed main() {
    cin.tie(0); ios::sync_with_stdio(false);
    ll T, N;
    cin >> T >> N;
    vector<ll> a(N);
    FOR(i, N) cin >> a[i];
    ll l = 0, r = N-1;
    unordered_map<ll,ll> seen;
    for(ll i = 0; i < N; i++) {
        l = i;
        if (seen.find(a[i]) != seen.end()) {
            break;
        }
        seen[a[i]] = 1;
    }
    for(ll i = N-1; i >= 0; i--) {
        r = i;
        if (seen.find(a[i]) != seen.end()) {
            break;
        }
        seen[a[i]] = 1;
    }
    pair<ll,ll> bsf = {l, r};
    unordered_set<ll> dupe;
    r++;
    while(0 < l) {
        l--;
        seen[a[l]]--;
        if (seen[a[l]] <= 1 && dupe.find(a[l]) != dupe.end()) dupe.erase(dupe.find(a[l]));
        while(l < r) {
            r--;
            seen[a[r]]++;
            if (seen[a[r]] == 1 && dupe.size() == 0) {
                if (r-1 - l <= bsf.S - bsf.F) bsf = {l, r-1};
            } else {
                if (seen[a[r]] > 1) dupe.insert(a[r]);
                break;
            }
        }
    }
    cout << bsf.F << ' ' << bsf.S << endl;
}
#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...