Submission #718729

#TimeUsernameProblemLanguageResultExecution timeMemory
718729CyanmondArcade (NOI20_arcade)C++17
100 / 100
496 ms48312 KiB
#include <bits/stdc++.h> using i64 = long long; constexpr i64 inf = 1ll << 60; using F = std::pair<i64, int>; F op(F a, F b) { return std::min(a, b); } F e() { return {inf, 0}; } struct SegTree { int n, size; std::vector<F> data; SegTree(const std::vector<F> &vec) : n(vec.size()) { size = 1; while (size < n) size *= 2; data.assign(2 * size, e()); std::copy(vec.begin(), vec.end(), data.begin() + size); for (int i = size - 1; i >= 1; --i) data[i] = op(data[2 * i], data[2 * i + 1]); } void set(int i, const F &v) { i += size; data[i] = v; while (i != 1) { i /= 2; data[i] = op(data[2 * i], data[2 * i + 1]); } } F fold(int l, int r) { l += size; r += size; F ret = e(); while (l < r) { if (l & 1) ret = op(ret, data[l++]); if (r & 1) ret = op(ret, data[--r]); l /= 2; r /= 2; } return ret; } }; void solve() { i64 N; int M; std::cin >> N >> M; std::vector<i64> T(M), A(M); for (auto &e : T) std::cin >> e; for (auto &e : A) std::cin >> e; std::vector<std::pair<i64, i64>> points(M); for (int i = 0; i < M; ++i) { points[i] = {T[i] + A[i], T[i] - A[i]}; } std::sort(points.begin(), points.end()); std::vector<std::pair<i64, int>> initVec(M); for (int i = 0; i < M; ++i) { initVec[i] = {points[i].second, i}; } SegTree seg(initVec); int answer = 0; while (seg.fold(0, M) != e()) { ++answer; int l = 0; while (true) { const auto mn = seg.fold(l, M); if (mn.first == inf) break; seg.set(mn.second, e()); l = mn.second; } } std::cout << answer << std::endl; } int main() { int T; // std::cin >> T; T = 1; while (T--) { solve(); } }
#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...