rt,同时问一下爆空间可以申诉吗?
s组t2,我因为贪把N开到了2000,空间成了640MB(我不太会算空间),改成1000就60分了((;´༎ຶД༎ຶ`) 哭死)
代码放这里了
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2005;//改成1005就60了的地方
LL a[N],b[N],n,m,q,c[N][N],d[N][N][20],l1,r1,l2,r2;
int main(){
//freopen("game.in","r",stdin);
//freopen("game.out","w",stdout);
cin>>n>>m>>q;
for(register int i=1;i<=n;i++) cin>>a[i];
for(register int i=1;i<=m;i++) cin>>b[i];
for(register int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
c[i][j] = a[i] * b[j];
memset(d,127/3,sizeof d);
for(register int i=1;i<=n;i++){
for(register int j=1;j<=m;j++) d[i][j][0] = c[i][j];
for(register int j=1;(1<<j)<=m;j++)
for(register int k=1;k<=m-(1<<j)+1;k++)
d[i][k][j] = min(d[i][k][j-1],d[i][k+(1<<(j-1))][j-1]);
}
for(register int i=1;i<=q;i++){
cin>>l1>>r1>>l2>>r2;
LL sum = -1e18;
for(register int j=l1;j<=r1;j++){
LL ans = 1e18,k = l2;
while(k <= r2){
LL len = log2(r2 - k + 1);
ans = min(ans,d[j][k][len]);
k += (1 << len);
}
sum = max(sum,ans);
}
printf("%lld\n",sum);
}
return 0;
}