Submission

Status:

(TSSSSSSSSSSSS)(TSSSSSS)(SSSSSSSSS)

Subtask/Task Score:

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

Score: 0

User: Trees

Problemset: Red Zone

Language: cpp

Time: 1.096 second

Submitted On: 2026-03-06 09:21:38

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

int n,m,L,d;
vector<int> a;
vector<int> b;

bool check(int mid)
{
    vector<long long> dist(n+2,0);

    for(int i=1;i<=mid;++i){
        int bmin = max(1,b[i]-L);
        int bmax = min(n+1,b[i]+L+1);

        dist[bmin] += d;
        dist[bmax] -= d;
    }

    long long curr = 0;

    for(int i=1;i<=n;++i){
        curr += dist[i];

        if(curr < a[i])return false;
    }
    return true;
}

int main()
{
    cin >> n >> m >> L >> d;
    
    a.assign(n+1,0);
    b.assign(m+1,0);

    for(int i=1;i<=n;++i)
    cin >> a[i];

    for(int j=1;j<=m;++j)
    cin >> b[j];

    int l,r,ans;
    l = 1;
    r = m;
    ans = -1;

    while(l<=r){
        int mid = (l+r)/2;

        if(check(mid)){
            ans = mid;
            r = mid;
        }
        else{
            l = mid;
        }
    }

    cout << ans;
}