Submission #1274100

#TimeUsernameProblemLanguageResultExecution timeMemory
1274100MisterReaperAdvertisement 2 (JOI23_ho_t2)C++20
100 / 100
261 ms22040 KiB
// File advertisement.cpp created on 29.09.2025 at 09:22:03 #include <bits/stdc++.h> using i64 = long long; #ifdef DEBUG #include "/home/ahmetalp/Desktop/Workplace/debug.h" #else #define debug(...) void(23) #endif constexpr int max_N = int(5E5) + 5; constexpr int inf = int(2E9) + 5; std::array<int, 3> A[max_N], B[max_N]; int rem[max_N]; int T[max_N << 2][2]; #define def int mid = (l + r) >> 1, lv = v + 1, rv = v + ((mid - l + 1) << 1) void build(int v, int l, int r) { if (l == r) { T[v][0] = A[l][0] - A[l][1]; T[v][1] = A[l][0] + A[l][1]; return; } def; build(lv, l, mid); build(rv, mid + 1, r); T[v][0] = std::max(T[lv][0], T[rv][0]); T[v][1] = std::min(T[lv][1], T[rv][1]); } void rem1(int v, int l, int r, int p, int x) { if (p < l || T[v][0] < x) { return; } if (l == r) { rem[l] = true; T[v][0] = -inf; T[v][1] = inf; return; } def; rem1(lv, l, mid, p, x); rem1(rv, mid + 1, r, p, x); T[v][0] = std::max(T[lv][0], T[rv][0]); T[v][1] = std::min(T[lv][1], T[rv][1]); } void rem2(int v, int l, int r, int p, int x) { if (p > r || T[v][1] > x) { return; } if (l == r) { rem[l] = true; T[v][0] = -inf; T[v][1] = inf; return; } def; rem2(lv, l, mid, p, x); rem2(rv, mid + 1, r, p, x); T[v][0] = std::max(T[lv][0], T[rv][0]); T[v][1] = std::min(T[lv][1], T[rv][1]); } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int N; std::cin >> N; for (int i = 0; i < N; ++i) { int X, E; std::cin >> X >> E; A[i] = {X, E}; } std::sort(A, A + N); for (int i = 0; i < N; ++i) { A[i][2] = i; } build(0, 0, N - 1); for (int i = 0; i < N; ++i) { B[i] = A[i]; } std::sort(B, B + N, [&](auto lhs, auto rhs) { return lhs[1] > rhs[1]; }); int ans = 0; for (int i = 0; i < N; ++i) { int j = B[i][2]; if (rem[j]) { continue; } ans++; rem1(0, 0, N - 1, j, A[j][0] - A[j][1]); rem2(0, 0, N - 1, j, A[j][0] + A[j][1]); } std::cout << ans << '\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...