Submission

Status:

(PPPPPPPPP-SSS)(PPPPPP-)(SSSSSSSSS)

Subtask/Task Score:

{0/30}{0/30}{0/40}

Score: 0

User: Kittiponn

Problemset: Red Zone

Language: cpp

Time: 0.018 second

Submitted On: 2026-03-05 11:05:20

#include <bits/stdc++.h>
#define ll long long
#define sp << ' ' <<
#define nl << '\n' 
#define cnl cout << '\n'
using namespace std;
const int nx = 1e5+5;
const int INF = 1e9+5;
const int MOD = 1e9+7;
ll n,m,l,d;
ll bo[nx],ho[nx],pr[nx],da[nx];

int solve(int md){
    for(int i = 0;i < n;i++)pr[i] = 0,da[i] = 0;
    for(int i = 0;i < md;i++){
        if(bo[i]-l < 0)pr[0] += d;
        else pr[bo[i]-l] += d;
        if(bo[i]+l+1 > n);
        else pr[bo[i]+l+1] -= d;
    }
    for(int i = 0;i < n;i++){
        if(i == 0)da[i] = pr[i];
        else da[i] += da[i-1] + pr[i];
        //cout << da[i] << ' ';
    }
    for(int i = 0;i < n;i++){
        if(ho[i] - da[i] > 0){
            return 0;
        }
    }
    return 1;
}

int main(){
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> m >> l >> d;
    for(int i = 0;i < n;i++)cin >> ho[i];
    for(int i = 0;i < m;i++)cin >> bo[i];
    int li = 0, r = m+1;
    while(li < r){
        //cout << l sp r nl;
        int md = (li+r)/2;
        if(solve(md))r = md;
        else li = md + 1;
    }
    if(li == m+1)cout << "-1";
    else cout << li;
}
/* 6 8 1 4
4 7 6 2 5 3
1
3
6
1
4
6
5
3 */