Submission #66447327


Source Code Expand

#include <bits/stdc++.h>
#include <atcoder/modint>
#include <atcoder/lazysegtree>

namespace {
    using ModInt [[maybe_unused]] = atcoder::modint998244353;
    using Num [[maybe_unused]] = long long int;
    using Vec [[maybe_unused]] = std::vector<Num>;
    using Set [[maybe_unused]] = std::set<Num>;
    using Mset [[maybe_unused]] = std::multiset<Num>;
    using Edges [[maybe_unused]] = std::vector<std::vector<Num>>;

    template<typename T>
    using Q [[maybe_unused]] = std::queue<T>;

    template<typename T>
    using PQ [[maybe_unused]] = std::priority_queue<T, std::vector<T>, std::greater<T>>;

    const std::vector<std::pair<Num, Num>> dyxs {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
    std::map<char, std::pair<Num, Num>> directions {{'D', {1, 0}}, {'U', {-1, 0}}, {'R', {0, 1}}, {'L', {0, -1}}};

    template<typename T>
    void print_oneline(const std::vector<T>& vec, std::ostream& os) {
        const auto size = vec.size();
        for(size_t i{0}; i<size; ++i) {
            os << vec.at(i) << (((i+1) == size) ? '\n' : ' ');
        }
    }

    template<typename T>
    void print_each(const std::vector<T>& vec, std::ostream& os) {
        const auto size = vec.size();
        for(size_t i{0}; i<size; ++i) {
            os << vec.at(i) << '\n';
        }
    }
}

constexpr Num Inf = 1000000000LL;

Num func_operate(Num a, Num b) {
    return std::max(a, b);
}

Num func_unit() {
    return -Inf;
}

Num func_map(Num a, Num b) {
    return a + b;
}

Num func_compose(Num a, Num b) {
    return a + b;
}

Num func_id() {
    return 0;
}

void solve(std::istream& is, std::ostream& os) {
    Num n, d, r;
    is >> n >> d >> r;

    std::vector<std::pair<Num,Num>> vs;
    for(Num i{0}; i<n; ++i) {
        Num h;
        is >> h;
        vs.push_back(std::make_pair(-h,i));
    }
    std::ranges::sort(vs);

    atcoder::lazy_segtree<Num, func_operate, func_unit, Num, func_map, func_compose, func_id> tree(n);
    std::deque<std::pair<Num,Num>> wq;
    Num ans {0};

    for(const auto& [nh, center] : vs) {
        const auto h = -nh;
        const Num left = std::max(0LL, center - r);
        const Num right = std::min(n, center + r + 1);

        while(!wq.empty()) {
            const auto [w, pos] = wq.front();
            if (h > (w - d)) {
                break;
            }

            wq.pop_front();
            if (tree.get(pos) >= 0) {
                tree.apply(pos, pos+1, 1);
            } else {
                tree.apply(pos, pos+1, Inf+1);
            }

            Num mx = tree.prod(left, right);

            if (mx >= 0) {
                tree.apply(center, center+1, mx);
                ans = std::max(ans, mx);
            }
        }

        wq.push_back(std::make_pair(h, center));
    }

    os << ans << "\n";
}

int main(void) {
    solve(std::cin, std::cout);
    return 0;
}

Submission Info

Submission Time
Task F - Athletic
User zettsut
Language C++ 20 (gcc 12.2)
Score 500
Code Size 2955 Byte
Status AC
Exec Time 421 ms
Memory 31636 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 3568 KiB
00_sample_01.txt AC 1 ms 3564 KiB
01_test_00.txt AC 1 ms 3648 KiB
01_test_01.txt AC 2 ms 3600 KiB
01_test_02.txt AC 1 ms 3620 KiB
01_test_03.txt AC 1 ms 3572 KiB
01_test_04.txt AC 2 ms 3592 KiB
01_test_05.txt AC 2 ms 3664 KiB
01_test_06.txt AC 211 ms 21960 KiB
01_test_07.txt AC 409 ms 27148 KiB
01_test_08.txt AC 103 ms 12692 KiB
01_test_09.txt AC 64 ms 8440 KiB
01_test_10.txt AC 103 ms 12868 KiB
01_test_11.txt AC 325 ms 25736 KiB
01_test_12.txt AC 119 ms 13308 KiB
01_test_13.txt AC 5 ms 3784 KiB
01_test_14.txt AC 81 ms 9220 KiB
01_test_15.txt AC 54 ms 8148 KiB
01_test_16.txt AC 256 ms 22740 KiB
01_test_17.txt AC 316 ms 24708 KiB
01_test_18.txt AC 415 ms 27012 KiB
01_test_19.txt AC 411 ms 27072 KiB
01_test_20.txt AC 379 ms 27016 KiB
01_test_21.txt AC 419 ms 27148 KiB
01_test_22.txt AC 378 ms 27072 KiB
01_test_23.txt AC 421 ms 27084 KiB
01_test_24.txt AC 351 ms 27060 KiB
01_test_25.txt AC 144 ms 31560 KiB
01_test_26.txt AC 143 ms 31636 KiB
01_test_27.txt AC 236 ms 27148 KiB
01_test_28.txt AC 316 ms 27020 KiB
01_test_29.txt AC 328 ms 27016 KiB
01_test_30.txt AC 361 ms 26960 KiB
01_test_31.txt AC 369 ms 27080 KiB
01_test_32.txt AC 373 ms 27148 KiB
01_test_33.txt AC 377 ms 27068 KiB
01_test_34.txt AC 373 ms 26984 KiB
01_test_35.txt AC 371 ms 27064 KiB
01_test_36.txt AC 1 ms 3464 KiB