제출 #1335510

#제출 시각아이디문제언어결과실행 시간메모리
1335510kawhietGift Boxes (EGOI25_giftboxes)C++20
100 / 100
73 ms4312 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t, n;
    cin >> t >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    auto get = [&](int k) {
        vector<int> cnt(t);
        int res = 0;
        auto add = [&](int x) {
            if (cnt[x] == 0) {
                res++;
            } else if (cnt[x] == 1) {
                res--;
            }
            cnt[x]++;
        };
        auto rem = [&](int x) {
            if (cnt[x] == 1) {
                res--;
            } else if (cnt[x] == 2) {
                res++;
            }
            cnt[x]--;
        };
        for (int i = k; i < n; i++) {
            add(a[i]);
        }
        if (res == n - k) {
            return vector<int>({0, k - 1});
        }
        int l = 0, r = k - 1;
        for (int i = k; i < n; i++) {
            rem(a[i]);
            add(a[i - k]);
            l++; r++;
            if (res == n - k) {
                return vector<int>({l, r});
            }
        }
        return vector<int>({-1, -1});
    };
    vector<int> ans;
    int l = 0, r = n;
    while (l + 1 < r) {
        int m = (l + r) / 2;
        auto p = get(m);
        if (p[0] != -1) {
            ans = p;
            r = m;
        } else {
            l = m;
        }
    }
    cout << ans[0] << ' ' << ans[1] << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...