Submission #66341587


Source Code Expand

#include <bits/stdc++.h>

using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned;

using u128 = unsigned __int128;
using i128 = __int128;
template<class Info>
struct SegmentTree {
    int n;
    std::vector<Info> info;
    SegmentTree() : n(0) {}
    SegmentTree(int n_, Info v_ = Info()) {
        init(n_, v_);
    }
    template<class T>
    SegmentTree(std::vector<T> init_) {
        init(init_);
    }
    void init(int n_, Info v_ = Info()) {
        init(std::vector(n_, v_));
    }
    template<class T>
    void init(std::vector<T> init_) {
        n = init_.size();
        info.assign(4 << std::__lg(n), Info());
        std::function<void(int, int, int)> build = [&](int p, int l, int r) {
            if (r - l == 1) {
                info[p] = init_[l];
                return;
            }
            int m = (l + r) / 2;
            build(2 * p, l, m);
            build(2 * p + 1, m, r);
            pull(p);
        };
        build(1, 0, n);
    }
    void pull(int p) {
        info[p] = info[2 * p] + info[2 * p + 1];
    }
    void modify(int p, int l, int r, int x, const Info &v) {
        if (r - l == 1) {
            info[p] = v;
            return;
        }
        int m = (l + r) / 2;
        if (x < m) {
            modify(2 * p, l, m, x, v);
        } else {
            modify(2 * p + 1, m, r, x, v);
        }
        pull(p);
    }
    void modify(int p, const Info &v) {
        modify(1, 0, n, p, v);
    }
    Info rangeQuery(int p, int l, int r, int x, int y) {
        if (l >= y || r <= x) {
            return Info();
        }
        if (l >= x && r <= y) {
            return info[p];
        }
        int m = (l + r) / 2;
        return rangeQuery(2 * p, l, m, x, y) + rangeQuery(2 * p + 1, m, r, x, y);
    }
    Info rangeQuery(int l, int r) {
        return rangeQuery(1, 0, n, l, r);
    }
    template<class F>
    int findFirst(int p, int l, int r, int x, int y, F &&pred) {
        if (l >= y || r <= x) {
            return -1;
        }
        if (l >= x && r <= y && !pred(info[p])) {
            return -1;
        }
        if (r - l == 1) {
            return l;
        }
        int m = (l + r) / 2;
        int res = findFirst(2 * p, l, m, x, y, pred);
        if (res == -1) {
            res = findFirst(2 * p + 1, m, r, x, y, pred);
        }
        return res;
    }
    template<class F>
    int findFirst(int l, int r, F &&pred) {
        return findFirst(1, 0, n, l, r, pred);
    }
    template<class F>
    int findLast(int p, int l, int r, int x, int y, F &&pred) {
        if (l >= y || r <= x) {
            return -1;
        }
        if (l >= x && r <= y && !pred(info[p])) {
            return -1;
        }
        if (r - l == 1) {
            return l;
        }
        int m = (l + r) / 2;
        int res = findLast(2 * p + 1, m, r, x, y, pred);
        if (res == -1) {
            res = findLast(2 * p, l, m, x, y, pred);
        }
        return res;
    }
    template<class F>
    int findLast(int l, int r, F &&pred) {
        return findLast(1, 0, n, l, r, pred);
    }
};

struct Max {
    int v = 0;
};

Max operator+(const Max &a, const Max &b) {
    return {std::max(a.v, b.v)};
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int N, D, R;
    std::cin >> N >> D >> R;
    
    std::vector<int> H(N), iH(N);
    for (int i = 0; i < N; i++) {
        std::cin >> H[i];
        H[i]--;
        iH[H[i]] = i;
    }
    
    SegmentTree<Max> seg(N);
    std::vector<int> dp(N);
    int ans = 0;
    for (int i = 0; i < N; i++) {
        int x = iH[i];
        if (i >= D) {
            seg.modify(iH[i - D], {dp[i - D]});
        }
        int res = 1 + seg.rangeQuery(std::max(0, x - R), std::min(N, x + 1 + R)).v;
        dp[i] = res;
        ans = std::max(ans, res);
    }
    std::cout << ans - 1 << "\n";
    
    return 0;
}

Submission Info

Submission Time
Task F - Athletic
User jiangly
Language C++ 23 (gcc 12.2)
Score 500
Code Size 4047 Byte
Status AC
Exec Time 234 ms
Memory 13264 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 2
AC × 39
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3460 KiB
00_sample_01.txt AC 1 ms 3660 KiB
01_test_00.txt AC 1 ms 3572 KiB
01_test_01.txt AC 2 ms 3492 KiB
01_test_02.txt AC 1 ms 3540 KiB
01_test_03.txt AC 1 ms 3536 KiB
01_test_04.txt AC 2 ms 3696 KiB
01_test_05.txt AC 1 ms 3584 KiB
01_test_06.txt AC 86 ms 10524 KiB
01_test_07.txt AC 234 ms 13264 KiB
01_test_08.txt AC 38 ms 6936 KiB
01_test_09.txt AC 33 ms 5248 KiB
01_test_10.txt AC 34 ms 7052 KiB
01_test_11.txt AC 169 ms 12328 KiB
01_test_12.txt AC 35 ms 7272 KiB
01_test_13.txt AC 3 ms 3688 KiB
01_test_14.txt AC 26 ms 5432 KiB
01_test_15.txt AC 26 ms 5176 KiB
01_test_16.txt AC 108 ms 11048 KiB
01_test_17.txt AC 151 ms 11704 KiB
01_test_18.txt AC 189 ms 13096 KiB
01_test_19.txt AC 233 ms 13088 KiB
01_test_20.txt AC 127 ms 13176 KiB
01_test_21.txt AC 221 ms 13104 KiB
01_test_22.txt AC 141 ms 13100 KiB
01_test_23.txt AC 232 ms 13132 KiB
01_test_24.txt AC 105 ms 13096 KiB
01_test_25.txt AC 39 ms 13020 KiB
01_test_26.txt AC 39 ms 13096 KiB
01_test_27.txt AC 108 ms 13048 KiB
01_test_28.txt AC 107 ms 13072 KiB
01_test_29.txt AC 65 ms 13136 KiB
01_test_30.txt AC 172 ms 13072 KiB
01_test_31.txt AC 149 ms 13104 KiB
01_test_32.txt AC 170 ms 13172 KiB
01_test_33.txt AC 171 ms 13020 KiB
01_test_34.txt AC 170 ms 13068 KiB
01_test_35.txt AC 167 ms 13256 KiB
01_test_36.txt AC 1 ms 3396 KiB