Submission

Status:

(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)

Subtask/Task Score:

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

Score: 100

User: C12

Problemset: Red Zone

Language: cpp

Time: 0.016 second

Submitted On: 2026-03-09 23:25:22

#include <bits/stdc++.h>

using namespace std;

const int mod = 1e9+7;

vector<int> house;
vector<int> boom;

int n,m,l,d;

bool can(int mid){
    vector<int> damage(n+2,0);
    for(int i = 0;i <= mid;i++){
        damage[max(1,boom[i]-l)] += d;
        damage[min(n+1,boom[i]+l+1)] -= d;
    }
    int now = 0;
    for(int i = 1;i <= n;i++){
        now += damage[i];
        if(now < house[i])
            return 0;
    }
    return 1;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m >> l >> d;

    house = vector<int>(n+1);
    boom = vector<int>(m);

    for(int i = 1;i <= n;i++) cin >> house[i];
    for(int i = 0;i < m;i++) cin >> boom[i];

    int lo = 0;
    int hi = m-1;

    while(lo <= hi){
        int mid = (lo+hi)/2;
        if(can(mid)){
            hi = mid - 1;
        }
        else{
            lo = mid + 1;
        }
    }
    // cout << '\n';

    if(lo == m) lo = -2;
    cout << (lo+1);

    return 0;
}

/*

7 16
This is an example of text justification.

6 16
What must be acknowledgement shall be

*/