同题第二次问(哭了
4个点TLE了 有没有人可以教教我怎么优化啊!!!
或者是更好的算法...泪目 (还有就是我的快读加上后第二个样例无法输出了于是没用,怎么肥事)
以下是70pst的代码
#include<iostream>
using namespace std;
const int N=1e6+10;
long long n,m;
long long a[N],b[N],c[N];
long long ans=1e18,p;
inline int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9') {
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}//快读,不知可否有用..
inline bool jay(long long s){
for(int i=1;i<=n;i++)c[i]=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
c[j]+=max(min(s-b[i]+j,s+b[i]-j),(long long)0);//这里,简单了
for(int i=1;i<=n;i++)
if(c[i]<a[i]) return 0;
return 1;
}
int main(){
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=m;i++) cin>>b[i];
long long l=1,r=1e10;
while(l<=r){
long long mid=(l+r)/2;
if(jay(mid)){
ans=min(ans,mid);
r=mid-1;
}else{
l=mid+1;
}
}
cout<<ans;
return 0;
}