为什么只能输出1,哪里出问题了,下午就要参加下一轮模拟赛了,求教
码:
#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
const int N=1e6+10;
int a[N],b[N],c[N];
bool jay(int k){
for(int i=1;i<=m;i++){
c[b[i]]+=k;
for(int i=1;i<=n;i++)
if(i<b[i])c[i]+=max(0,k-b[i]+i);
else if(i>b[i])c[i]+=max(0,k-i+b[i]);
}
for(int i=1;i<=n;i++)
if(c[i]<a[i])return 0;
return 1;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int j=1;j<=m;j++)cin>>b[j];
int l=1,r=1e6;
while(l<r){
int mid=(r+l)/2;
if(jay(mid)){
ans=mid;
r=mid-1;
}
else l=mid+1;
}
cout<<ans;
return 0;
}