Submission #1359915

#TimeUsernameProblemLanguageResultExecution timeMemory
1359915nathlol2Gift Boxes (EGOI25_giftboxes)C++20
19 / 100
222 ms29744 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int t, n, a[N], fq[N], v[N];

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> t >> n;
    for(int i = 1;i<=n;i++){
        cin >> a[i];
    }
    int mxpf = 0, mxsf = 0;
    for(int i = 1;i<=n;i++){
        if(v[a[i]]){
            mxpf = i - 1;
            break;
        }
        v[a[i]] = 1;
    }
    memset(v, 0, sizeof v);
    for(int i = n;i>=1;i--){
        if(v[a[i]]){
            mxsf = i + 1;
            break;
        }
        v[a[i]] = 1;
    }
    mxsf = max(mxsf, mxpf + 1);
    multiset<int> s;
    auto add = [&](int c){
        if(s.find(fq[c]) != s.end()) s.erase(s.find(fq[c]));
        fq[c]++;
        s.insert(fq[c]);
    };
    auto rem = [&](int c){
        if(s.find(fq[c]) != s.end()) s.erase(s.find(fq[c]));
        fq[c]--;
        s.insert(fq[c]);
    };
    for(int i = mxsf;i<=n;i++) add(a[i]);
    int mn = INT_MAX;
    pair<int, int> ans;
    for(int i = 1;i<=mxpf;i++){
        add(a[i]);
        while(*s.rbegin() >= 2){
            rem(a[mxsf]);
            mxsf++;
        }
        if(mxsf - i - 1 < mn){
            mn = mxsf - i - 1;
            ans = {i + 1, mxsf - 1};
        }
    }
    cout << ans.first - 1 << ' ' << ans.second - 1;
}
#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...