Submission #1369933

#TimeUsernameProblemLanguageResultExecution timeMemory
1369933turkeyorzGift Boxes (EGOI25_giftboxes)C++20
76 / 100
40 ms12292 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long

void solve(int tc)
{
    int t, n;
    cin>>t>>n;
    vector<int> a(n), cnt(t, 0);
    for(auto &i : a) {
        cin>>i;
        ++cnt[i];
    }
    if(n <= 10000) {
        pair<int, int> p = {-1, -1};
        int tot = n - t;
        for(int i=0;i<n;++i) {
            int tot2 = 0;
            vector<int> cnt2(t, 0);
            for(int j=i;j<n;++j) {
                if(cnt[a[j]] > 1) {
                    ++tot2;
                    if(tot2 == tot) {
                        if(p.first == -1 || p.second - p.first + 1 > j - i + 1) {
                            p = {i, j};
                        }
                    }
                }
                --cnt[a[j]];
                ++cnt2[a[j]];
            }
            for(int i=0;i<t;++i)    
                cnt[i] += cnt2[i];
        }
        cout<<p.first<<' '<<p.second<<'\n';
    } else {
        int tot = n - t, nn = 0;
        pair<int, int> p = {-1, -1};
        deque<int> p3;
        deque<pair<int, int>> p2;
        vector<int> cnt2(t, 0);
        for(int i=0;i<n;++i) {
            ++cnt2[a[i]];
            p2.push_back({a[i], cnt2[a[i]]});
            p3.push_back(i);
            if(cnt2[a[i]] == 1)
                ++nn;
            while(p2.size() > 0 && p2[0].second == 1 && cnt2[p2[0].first] == cnt[p2[0].first]) {
                p2.pop_front();
                p3.pop_front();
            }
            if(nn >= tot && p3.size()) {
                int gg = i - p3.front() + 1;
                if(p.first == -1 || p.second - p.first + 1 > gg) {
                    p = {p3.front(), i};
                }
            }
        }
        cout<<p.first<<' '<<p.second<<'\n';
    }
}

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

    // freopen("problem.in", "r", stdin);
    // freopen("problem.out", "w", stdout);

    int t = 1;
    // cin >> t;
    for (int i = 1; i <= t; ++i) {
        solve(t - i);
    }
    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...