#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,q,f1[100005][25],f2[100005][25],f3[100005][25],f4[100005][25],f5[100005][25],f6[100005][25];
int a[100005],b[100005];
bool gk(int &a,int b){
return b>a ? a=b,true : false;
}
signed main(){
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
f1[i][0]=f2[i][0]=a[i];
f3[i][0]=a[i]<0 ? a[i] : LONG_LONG_MIN;
f4[i][0]=a[i]>=0 ? a[i] : LONG_LONG_MAX;
}
for(int j=1;j<=m;j++) cin>>b[j],f5[j][0]=f6[j][0]=b[j];
int lg[100005];
lg[1]=0;
for(int i=2;i<=max(n,m);i++) lg[i]=lg[i>>1]+1;
for(int j=1;j<=lg[n];j++)
for(int i=1;i+(1<<j)-1<=n;i++){
int p=i+(1<<(j-1));
f1[i][j]=max(f1[i][j-1],f1[p][j-1]),f3[i][j]=max(f3[i][j-1],f3[p][j-1]);
f2[i][j]=min(f2[i][j-1],f2[p][j-1]),f4[i][j]=min(f4[i][j-1],f4[p][j-1]);
}
for(int j=1;j<=lg[m];j++)
for(int i=1;i+(1<<j)-1<=m;i++){
int p=i+(1<<(j-1));
f5[i][j]=max(f5[i][j-1],f5[p][j-1]),f6[i][j]=min(f6[i][j-1],f6[p][j-1]);
}
for(int i=1;i<=q;i++){
int l1,r1,l2,r2;
cin>>l1>>r1>>l2>>r2;
int sa=log(r1-l1+1)/log(2),sb=log(r2-l2+1)/log(2);
int fa=max(f1[l1][sa],f1[r1-(1<<sa)+1][sa]);
int fb=max(f2[l1][sa],f2[r1-(1<<sa)+1][sa]);
int fc=max(f3[l1][sa],f3[r1-(1<<sa)+1][sa]);
int fd=max(f4[l1][sa],f4[r1-(1<<sa)+1][sa]);
int fe=max(f5[l2][sb],f5[r2-(1<<sb)+1][sb]);
int ff=max(f6[l2][sb],f6[r2-(1<<sb)+1][sb]);
int ans=LONG_LONG_MIN;
gk(ans,fa*(fa<0 ? fe : ff));
gk(ans,fb*(fb<0 ? fe : ff));
if(fc!=LONG_LONG_MIN) gk(ans,fc*(fc<0 ? fe : ff));
if(fd!=LONG_LONG_MAX) gk(ans,fd*(fd<0 ? fe : ff));
cout<<ans<<endl;
}
return 0;
}
什么意思?
就是好像AI写的一样,你把变量名改短了一点
我没抄AI,AI写的丑不拉几
哦,那我错怪你了
我来康康
int sa=log(r1-l1+1)/log(2),sb=log(r2-l2+1)/log(2);
为什么要这么写?
c++中,取底数的方法有三种,可以直接log2(),也可以log()/log(2)
洛谷上也是全WA
那必须的
我测试好数据了
你这代码和第一篇题解好像诶
洛谷上??
嗯……
没有。。。纯粹说了一下
啊?!
赶紧看题吧