Submission

Status:

(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)

Score: 100

User: njoop

Problemset: Red Zone

Language: cpp

Time: 0.021 second

Submitted On: 2025-04-11 13:01:37

#include <bits/stdc++.h>
#define int long long
using namespace std;

int n, m, l, d, arr[100010], bomb[100010], sw[100010];

bool solve(int cnt) {
    for(int i=0; i<=n+1; i++) {
        sw[i] = 0;
    }
    for(int i=1; i<=min(cnt, m); i++) {
        sw[max(0LL, bomb[i]-l)]++;
        sw[min(n+1, bomb[i]+l+1)]--;
    }
    int dur=0;
    for(int i=0; i<=n; i++) {
        dur += sw[i];
        sw[i] = dur*d;
    }
    for(int i=1; i<=n; i++) {
        if(sw[i] < arr[i]) return 0;
    }
    return 1;
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> m >> l >> d;
    for(int i=1; i<=n; i++) {
        cin >> arr[i];
    }
    for(int i=1; i<=m; i++) {
        cin >> bomb[i];
    }
    int lo=1, r=m+1;
    while(lo < r) {
        int mid = (lo+r)/2;
        if(solve(mid)) {
            r = mid;
        } else {
            lo = mid+1;
        }
    }
    if(lo >= m+1) cout << -1;
    else cout << lo;
}