Submission

Status:

(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)

Subtask/Task Score:

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

Score: 100

User: august

Problemset: Red Zone

Language: cpp

Time: 0.024 second

Submitted On: 2025-12-07 10:57:56

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

int n,m,L,d;

bool check(int mid, vector<int>&b, vector<int>&a) {
    vector<int> s(n+1);
    for (int i=1; i<=mid; i++) {
        s[max(1,b[i]-L)] += -d;
        if (b[i]+L+1 <= n) s[b[i]+L+1] += d;
    }
    for (int i=2; i<=n; i++) {
        s[i] += s[i-1];
    }
    
    for (int i=1; i<=n; i++) {
        if (s[i] + a[i] > 0) return false;
    }
    return true;
}
int main() {
	cin.tie(0)->sync_with_stdio(0);
	cin>> n>> m>> L>> d;
	
	vector<int> a(n+1);
	for (int i=1; i<=n; i++) cin>> a[i];
	
	vector<int> b(m+1);
	for (int i=1; i<=m; i++) cin>> b[i];
	
	int l=1, r=m;
	while (l <= r) {
	    int mid=(l+r)/2;
	    if (check(mid, b, a)) r=mid-1;
	    else l=mid+1;
	}
	cout<< (l>m ? -1 : l);
	
    
}