Submission

Status:

(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)

Subtask/Task Score:

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

Score: 100

User: tHeNyXs

Problemset: Red Zone

Language: cpp

Time: 0.017 second

Submitted On: 2026-03-06 08:12:32

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

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

    int n,m,l,d;
    cin >> n >> m >> l >> d;

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

    vector<int> pos(m+1);
    for(int i=1;i<=m;i++) cin >> pos[i];

    auto check = [&](int k){
        vector<long long> diff(n+2,0);

        for(int i=1;i<=k;i++){
            int L = max(1,pos[i]-l);
            int R = min(n,pos[i]+l);

            diff[L] -= d;
            diff[R+1] += d;
        }

        long long cur = 0;

        for(int i=1;i<=n;i++){
            cur += diff[i];
            if(a[i] + cur > 0) return false;
        }

        return true;
    };

    int L=1,R=m,ans=-1;

    while(L<=R){
        int mid=(L+R)/2;

        if(check(mid)){
            ans=mid;
            R=mid-1;
        }
        else{
            L=mid+1;
        }
    }

    cout<<ans;
}