Submission

Status:

(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)

Subtask/Task Score:

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

Score: 100

User: navysrimuang

Problemset: Red Zone

Language: cpp

Time: 0.016 second

Submitted On: 2026-03-19 22:15:50

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int n,m,l,d;
ll hs[100002];
int b[100002];

bool chk(int k){

	vector<ll> diff(n+2,0);
	for(int i = 1;i<=k;i++){
		int L = max(1,b[i] - l);
		int R = min(n,b[i] + l);
		diff[L] += 1;
		diff[R+1] -= 1;
	}

	ll cur = 0;
	
	for(int i = 1;i<=n;i++){
		cur += diff[i];
		if(cur*d < hs[i]) 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 >> hs[i];
	for(int i = 1;i<=m;i++) cin >> b[i];
	int lo = 1, hi = m;
	int ans = -1;
	while(lo <= hi){
		int mid = (lo+hi)/2;
		if(chk(mid)){
			ans = mid;
			hi = mid-1;
		}else{
			lo = mid+1;
		}
	}
	cout << ans << "\n";
	return 0;
}