Submission

Status:

(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)

Subtask/Task Score:

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

Score: 100

User: Kittiponn

Problemset: Red Zone

Language: cpp

Time: 0.023 second

Submitted On: 2026-03-05 19:09:44

#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 ho[nx],bo[nx];ll pr[nx];
    ll da[nx];

int solve(ll md){
    
    for(int i = 0;i <= n;i++){
        pr[i] = 0;
        da[i] = 0;
    }
    for(int i = 1;i <= md;i++){
        ll left = bo[i]-l;
        ll right = bo[i]+l+1;
        if(left < 1)left = 1;
        if(right >= n+1)right = n+1;
        pr[left] += d;
        pr[right] -= d;
    }
    
    for(int i = 1;i <= n;i++){
        da[i] = da[i-1] +pr[i];
        //cout << da[i] << ' ';
    }
    //cnl;
    for(int i = 1;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 = 1;i <= n;i++)cin >> ho[i];
    for(int i = 1;i <= m;i++)cin >> bo[i];
    ll lo = 1,hi = m+1;
    while(lo < hi){
        //cout << lo sp hi nl;
        ll md = (lo+hi)/2;
        if(solve(md))hi = md;
        else lo = md+1;
    }
    if(lo == m+1)cout << "-1";
    else cout << lo;
}