Submission
Status:
(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)
Subtask/Task Score:
{30/30}{30/30}{40/40}
Score: 100
User: theem1502
Problemset: Red Zone
Language: cpp
Time: 0.047 second
Submitted On: 2026-02-23 20:23:16
#include <bits/stdc++.h>
using namespace std;
int main() {
int num, bombnum, bombradius, bombdamage;
cin >> num >> bombnum >> bombradius >> bombdamage;
vector<int> thearray(num);
for (int i = 0; i < num; i++) {
cin >> thearray[i];
}
vector<int> coorarray(bombnum);
for (int i = 0;i < bombnum; i++) {
cin >> coorarray[i];
coorarray[i]--;
}
int l = 0, r = bombnum + 1;
vector<int> sweep(num), darray(num);
while(l < r) {
int mid = (l + r) / 2;
// cout << "mid = " << mid << "\n";
for (int i = 0; i < num; i++) {
sweep[i] = 0;
darray[i] = 0;
}
for (int i = 0; i < mid; i++) {
int leftside = max(0, coorarray[i]-bombradius), rightside = min(num - 1, coorarray[i] + bombradius);
sweep[leftside]++;
if (rightside == num -1 ) {
continue;
}
sweep[rightside + 1]--;
}
darray[0] = sweep[0];
for (int i = 1;i < num; i++) {
darray[i] = darray[i-1] + sweep[i];
}
/*
for (int i = 0; i < num; i++) {
cout << darray[i] << " ";
}
*/
// cout << "\n";
int count = 0;
for (int i = 0; i < num; i++) {
if (thearray[i] - darray[i] * bombdamage <= 0) {
count++;
}
}
if (count == num) {
r = mid;
}
else {
l = mid + 1;
}
}
if (r == bombnum + 1) {
cout << -1 ;
return 0;
}
cout << l;
}