Submission
Status:
(PPPPPPPPPPPPP)(PPPPPPP)(PPPPPPPPP)
Subtask/Task Score:
{30/30}{30/30}{40/40}
Score: 100
User: tHeNyXs
Problemset: Red Zone
Language: cpp
Time: 0.016 second
Submitted On: 2026-03-06 08:13:15
#include <bits/stdc++.h>
using namespace std;
int n, m, l, d;
bool check(int a, vector<int>& num, vector<int>& order) {
vector<int> diff(n+2, 0);
for (int i = 1; i <= a; ++i) {
int pos = order[i];
int L = max(1, pos-l);
int R = min(n, pos+l);
diff[L] -= d;
diff[R+1] += d;
}
int cur = 0;
for (int i = 1; i <= n; ++i) {
cur += diff[i];
if (num[i] + cur > 0) return false;
}
return true;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(nullptr);
cin >> n >> m >> l >> d;
vector<int> a(n+1, 0);
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
vector<int> order(m+1);
for (int i = 1; i <= m; ++i) cin >> order[i];
int L = 1, R = m;
int ans = -1;
while (L <= R) {
int mid = (L+R)/2;
if (check(mid, a, order)) {
ans = mid;
R = mid-1;
}
else L = mid+1;
}
cout << ans;
return 0;
}