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;
}