#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
if (!(cin >> N)) return 0;
vector<ll> A(N), C(N);
for (int i = 0; i < N; ++i) {
ll X, Y;
cin >> X >> Y;
A[i] = X + Y; // used for right coverage (suffix max)
C[i] = Y - X; // used for left coverage (prefix max)
}
// suffix max of A
vector<ll> suffA(N);
suffA[N-1] = A[N-1];
for (int i = N - 2; i >= 0; --i) suffA[i] = max(A[i], suffA[i+1]);
// prefix max of C (we'll update on the fly; no separate array needed)
ll prefMaxC = LLONG_MIN;
long long rods = 0;
for (int i = 0; i < N; ++i) {
bool coveredLeft = (i > 0 && prefMaxC >= C[i]);
bool coveredRight = (i + 1 < N && suffA[i+1] >= A[i]);
if (!coveredLeft && !coveredRight) ++rods;
// update prefix max of C for next iterations
prefMaxC = max(prefMaxC, C[i]);
}
cout << rods << '\n';
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |