Submission
Status:
(PPPPPxSSSSSSS)(xSSSSSS)(SSSSSSSSS)
Subtask/Task Score:
{0/30}{0/30}{0/40}
Score: 0
User: tHeNyXs
Problemset: Red Zone
Language: cpp
Time: 0.012 second
Submitted On: 2026-03-06 08:12:07
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n, m, l, d;
bool check(int a, vector<ll>& num, vector<int>& order) {
vector<ll> diff(n+1, 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;
}
ll 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<ll> 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;
}