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 |
|
|
| 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 |