Submission
Status:
(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)
Subtask/Task Score:
{30/30}{30/30}{40/40}
Score: 100
User: syndrxme
Problemset: Red Zone
Language: cpp
Time: 0.054 second
Submitted On: 2026-03-14 14:20:45
#include<bits/stdc++.h>
using namespace std;
int n,m,l,d;
vector<int> house;
vector<int> bomb;
bool check(int mid){
vector<long long> diff(n+2,0);
for(int i=1;i<=mid;i++){
int pos = bomb[i];
int left = max(1,pos-l);
int right = min(n,pos+l);
diff[left]+=d;
diff[right+1]-=d;
}
long long curdamage = 0;
for(int i=1;i<=n;i++){
curdamage+=diff[i];
if(curdamage<house[i]){
return false;
}
}
return true;
}
int main(){
cin>>n>>m>>l>>d;
house.resize(n + 1);
bomb.resize(m + 1);
for(int i=1;i<=n;i++){
cin>>house[i];
}
for(int i=1;i<=m;i++){
cin>>bomb[i];
}
int left=0;
int r=m;
int ans=-1;
while(left<=r){
int mid = left + (r-left)/2;
if(check(mid)==true){
ans = mid;
r=mid-1;
}else{
left=mid+1;
}
}
cout<<ans;
return 0;
}