Submission

Status:

(PPPPP)(PPPPPPPPPPPPPPP)

Score: 100

User: admin

Problemset: Nostalgia v2

Language: cpp

Time: 0.110 second

Submitted On: 2025-01-11 23:40:20

#include <bits/stdc++.h>

using namespace std;

int n, x[100010], a[100010], ans, val;

struct segtree {
    vector<int> seg;

    void init() {
        seg.assign(600010, 0);
    }
    
    void upd(int l, int r, int idx, int val, int node) {
        if(l == r) {
            seg[node] = val;
            return;
        }
        int mid = (l+r)/2;
        if(idx <= mid) upd(l, mid, idx, val, node*2);
        else upd(mid+1, r, idx, val, node*2+1);
        seg[node] = min(seg[node*2], seg[node*2+1]);
    }

    int qry(int l, int r, int ql, int qr, int node) {
        if(l > qr || r < ql) return 1e9;
        if(l >= ql && r <= qr) return seg[node];
        int mid = (l+r)/2;
        return min(qry(l, mid, ql, qr, node*2), qry(mid+1, r, ql, qr, node*2+1));
    }

    void update(int idx, int val) {
        upd(1, 2*n, idx, val, 1);
    }

    int query(int ql, int qr) {
        return qry(1, 2*n, ql, qr, 1);
    }
};


int main() {
    segtree seg;
    seg.init();
    cin >> n;
    for(int i=1; i<=n; i++) {
        cin >> x[i];
    }
    for(int i=1; i<=n; i++) {
        cin >> a[i];
    }
    for(int i=1; i<=n; i++) {
        seg.update(i, val);
        val += a[i];
        val -= x[i];
    }
    for(int i=1; i<=n; i++) {
        seg.update(i+n, val);
        val += a[i];
        val -= x[i];
    }
    for(int i=1; i<=n; i++) {
        if(seg.query(i, i) == seg.query(i, i+n)) ans++;
    }
    cout << ans;
    return 0;
}