Submission

Status:

(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)

Subtask/Task Score:

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

Score: 100

User: krittaphot

Problemset: Red Zone

Language: cpp

Time: 0.044 second

Submitted On: 2026-03-06 13:30:54

#include <bits/stdc++.h>

using namespace std;
int n,m,l,k;

bool solve(int luk,vector<int> &v,vector<int> &bomb){
	vector<int> cnt(n+1,0);
	for(int i = 0;i<luk;i++){
		int left = max(0,bomb[i] - l);
		int right = min(n-1,bomb[i] + l) +1;
		cnt[left]++;
		cnt[right]--;
	}
	
	for(int i = 1;i<n;i++){
		cnt[i] += cnt[i-1];
	}
	int destroy = 0;
	for(int i = 0;i<n;i++){
		if(k * cnt[i] >= v[i]){
			destroy++;
		}
	}
	
	return destroy == n;
}
int main()
{
	cin >> n >> m >> l >> k;
	vector<int> v(n);
	vector<int> bomb(m);
	for(int i = 0;i<n;i++){
		cin >> v[i];
	}
	for(int i = 0;i<m;i++){
		cin >> bomb[i];
		bomb[i]--;
	}
	
	int l = 1;
	int r = m;
	int ans = -1;
	while(l<=r){
		int mid = l+(r-l)/2;
		if(solve(mid,v,bomb)){
			ans = mid;
			r = mid-1;
		}
		else{
			l = mid+1;
		}
	}
	
	cout << ans;
}