Submission
Status:
(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)
Subtask/Task Score:
{30/30}{30/30}{40/40}
Score: 100
User: C12
Problemset: Red Zone
Language: cpp
Time: 0.016 second
Submitted On: 2026-03-09 23:25:22
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
vector<int> house;
vector<int> boom;
int n,m,l,d;
bool can(int mid){
vector<int> damage(n+2,0);
for(int i = 0;i <= mid;i++){
damage[max(1,boom[i]-l)] += d;
damage[min(n+1,boom[i]+l+1)] -= d;
}
int now = 0;
for(int i = 1;i <= n;i++){
now += damage[i];
if(now < house[i])
return 0;
}
return 1;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m >> l >> d;
house = vector<int>(n+1);
boom = vector<int>(m);
for(int i = 1;i <= n;i++) cin >> house[i];
for(int i = 0;i < m;i++) cin >> boom[i];
int lo = 0;
int hi = m-1;
while(lo <= hi){
int mid = (lo+hi)/2;
if(can(mid)){
hi = mid - 1;
}
else{
lo = mid + 1;
}
}
// cout << '\n';
if(lo == m) lo = -2;
cout << (lo+1);
return 0;
}
/*
7 16
This is an example of text justification.
6 16
What must be acknowledgement shall be
*/