Submission #1297197

#TimeUsernameProblemLanguageResultExecution timeMemory
1297197chaitanyamehtaLightning Rod (NOI18_lightningrod)C++20
0 / 100
1037 ms234344 KiB
#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 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...