《策略游戏》爆零求助

#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

那必须的

我测试好数据了

你这代码和第一篇题解好像诶

洛谷上??

嗯……

没有。。。纯粹说了一下

啊?!

赶紧看题吧