rt,时间复杂度O(n2logn)
#include<bits/stdc++.h>
using namespace std;
long long n,m,M;
long long a[1000010],b[1000010],t[1000010];
bool check(long long x){
memset(t,0,sizeof(t));
for(long long i=1;i<=m;i++){
t[b[i]]+=x;
for(long long j=1;j<=n;j++){
if(j==b[i]) continue;
t[j]+=max(0ll,x-abs(b[i]-j));
}
}
for(long long i=1;i<=n;i++)
if(t[i]<a[i]) return false;
return true;
}
int main(){
cin>>n>>m;
for(long long i=1;i<=n;i++) cin>>a[i],M=max(M,a[i]);
for(long long i=1;i<=m;i++) cin>>b[i];
long long l=0,r=M<<1,mid;
while(l<r){
mid=(l+r)>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l;
return 0;
}
不知道怎么优化力(悲)