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;

}