Submission
Status:
(TSSSSSSSSSSSS)(TSSSSSS)(SSSSSSSSS)
Subtask/Task Score:
{0/30}{0/30}{0/40}
Score: 0
User: Trees
Problemset: Red Zone
Language: cpp
Time: 1.096 second
Submitted On: 2026-03-06 09:21:38
#include<bits/stdc++.h>
using namespace std;
int n,m,L,d;
vector<int> a;
vector<int> b;
bool check(int mid)
{
vector<long long> dist(n+2,0);
for(int i=1;i<=mid;++i){
int bmin = max(1,b[i]-L);
int bmax = min(n+1,b[i]+L+1);
dist[bmin] += d;
dist[bmax] -= d;
}
long long curr = 0;
for(int i=1;i<=n;++i){
curr += dist[i];
if(curr < a[i])return false;
}
return true;
}
int main()
{
cin >> n >> m >> L >> d;
a.assign(n+1,0);
b.assign(m+1,0);
for(int i=1;i<=n;++i)
cin >> a[i];
for(int j=1;j<=m;++j)
cin >> b[j];
int l,r,ans;
l = 1;
r = m;
ans = -1;
while(l<=r){
int mid = (l+r)/2;
if(check(mid)){
ans = mid;
r = mid;
}
else{
l = mid;
}
}
cout << ans;
}