@[YiZhiYeShengJuRuo](/user/759389) 有没有一种可能,别人看不到你的代码()
by SJH_qwq @ 2022-12-11 15:28:36
```cpp
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
const LL N=1e5+1,INF=1e18;
LL fa1[N][32],fa2[N][32],fb1[N][32],fb2[N][32],as1[N][32],as2[N][32],lg[N];
//fa1:a->max fa2:a->min fb1:b->max fb2:b->min
//as1:a>=0->min as2:a<0->max
int main()
{
// freopen("game3.in","r",stdin);
// freopen("game3.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n,m,q,l1,r1,l2,r2;
LL a1,a2,b1,b2,s1,s2;
cin>>n>>m>>q;
for (int i=2;i<=max(n,m);i++)
lg[i]=lg[i>>1]+1;//预处理log(n)
for (int i=1;i<=n;i++)
{
cin>>fa1[i][0];
fa2[i][0]=fa1[i][0];
if (fa1[i][0]>=0) as1[i][0]=fa1[i][0],as2[i][0]=-INF;
else as1[i][0]=INF,as2[i][0]=fa1[i][0];
}
for (int i=1;i<=m;i++)
{
cin>>fb1[i][0];
fb2[i][0]=fb1[i][0];
}
for (int j=1;j<=lg[n];j++)//ST表预处理
for (int i=1;i+(1<<j)-1<=n;i++)
{
fa1[i][j]=max(fa1[i][j-1],fa1[i+(1<<(j-1))][j-1]);
fa2[i][j]=min(fa2[i][j-1],fa2[i+(1<<(j-1))][j-1]);
as1[i][j]=min(as1[i][j-1],as1[i+(1<<(j-1))][j-1]);
as2[i][j]=max(as2[i][j-1],as2[i+(1<<(j-1))][j-1]);
}
for (int j=1;j<=lg[m];j++)
for (int i=1;i+(1<<j)-1<=m;i++)
{
fb1[i][j]=max(fb1[i][j-1],fb1[i+(1<<(j-1))][j-1]);
fb2[i][j]=min(fb2[i][j-1],fb2[i+(1<<(j-1))][j-1]);
}
while (q--)
{
cin>>l1>>r1>>l2>>r2;
a1=max(fa1[l1][lg[r1-l1+1]],fa1[r1-(1<<lg[r1-l1+1])+1][lg[r1-l1+1]]);
a2=min(fa2[l1][lg[r1-l1+1]],fa2[r1-(1<<lg[r1-l1+1])+1][lg[r1-l1+1]]);
b1=max(fb1[l2][lg[r2-l2+1]],fb1[r2-(1<<lg[r2-l2+1])+1][lg[r2-l2+1]]);
b2=min(fb2[l2][lg[r2-l2+1]],fb2[r2-(1<<lg[r2-l2+1])+1][lg[r2-l2+1]]);
s1=min(as1[l1][lg[r1-l1+1]],as1[r1-(1<<lg[r1-l1+1])+1][lg[r1-l1+1]]);
s2=max(as2[l1][lg[r1-l1+1]],as2[r1-(1<<lg[r1-l1+1])+1][lg[r1-l1+1]]);
if (a2>=0)//a全部为非负数
{
if (b2>=0) cout<<a1*b2<<"\n";//b全部为非负数
else cout<<a2*b2<<"\n";//b能取负数
}
else if (a1<=0)//a全部为非正数
{
if (b1<=0) cout<<a2*b1<<"\n";//b全部为负数
else cout<<a1*b1<<"\n";//b能取非负数
}
else//a既能取非负数也能取负数
{
if (b2>=0) cout<<a1*b2<<"\n";//b全部为非负数
else if (b1<=0) cout<<a2*b1<<"\n";//b全部为非正数
else cout<<max(s1*b2,s2*b1)<<"\n";//b既能取非负数也能取负数
}
}
return 0;
}
```
by CH_mengxiang @ 2022-12-11 15:33:30
代码QWQ
```cpp
/*This is ZJW's Code!!!*/
#include<bits/stdc++.h>
#define inf (1e9)
using namespace std;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f*=-1;
if(ch==-1)exit(0);
ch=getchar();
}
while(ch>='0'&&ch<='9')
x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*f;
}
inline void write(int x){
if(x<0)x=-x,putchar('-');
if(x<10){putchar(x+48);return;}
write(x/10);putchar(x%10+48);
}const int N=3e5+10,logN=log2(N);
int la[N],lb[N],a[N],b[N],n,m,q;
int azx[N][logN+10],afx[N][logN+10];
int azn[N][logN+10],afn[N][logN+10];
int bzx[N][logN+10],bfx[N][logN+10];
int bzn[N][logN+10],bfn[N][logN+10];
int as0[N],bs0[N];
inline void STa(){
la[0]=-1;
for(int i=1;i<=n;i++)
azn[i][0]=inf,afx[i][0]=-inf;
for(int i=1;i<=n;i++){
if(a[i]>0) azn[i][0]=azx[i][0]=a[i];
else if(a[i]<0) afn[i][0]=afx[i][0]=a[i];
as0[i]=as0[i-1]+(a[i]==0);
la[i]=la[i>>1]+1;
}
for(int j=1;j<=logN;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
azx[i][j]=max(azx[i][j-1],azx[i+(1<<(j-1))][j-1]),
azn[i][j]=min(azn[i][j-1],azn[i+(1<<(j-1))][j-1]),
afx[i][j]=max(afx[i][j-1],afx[i+(1<<(j-1))][j-1]),
afn[i][j]=min(afn[i][j-1],afn[i+(1<<(j-1))][j-1]);
}
inline int azMAX(int x,int y){int s=la[y-x+1];return max(azx[x][s],azx[y-(1<<s)+1][s]);}
inline int azMIN(int x,int y){int s=la[y-x+1];return min(azn[x][s],azn[y-(1<<s)+1][s]);}
inline int afMAX(int x,int y){int s=la[y-x+1];return max(afx[x][s],afx[y-(1<<s)+1][s]);}
inline int afMIN(int x,int y){int s=la[y-x+1];return min(afn[x][s],afn[y-(1<<s)+1][s]);}
inline int aZERO(int x,int y){return(as0[y]-as0[x-1]>0);}
inline void STb(){
lb[0]=-1;
for(int i=1;i<=m;i++)
bzn[i][0]=inf,bfx[i][0]=-inf;
for(int i=1;i<=m;i++){
if(b[i]>0) bzn[i][0]=bzx[i][0]=b[i];
else if(b[i]<0) bfn[i][0]=bfx[i][0]=b[i];
bs0[i]=bs0[i-1]+(b[i]==0);
lb[i]=lb[i>>1]+1;
}
for(int j=1;j<=logN;j++)
for(int i=1;i+(1<<j)-1<=m;i++)
bzx[i][j]=max(bzx[i][j-1],bzx[i+(1<<(j-1))][j-1]),
bzn[i][j]=min(bzn[i][j-1],bzn[i+(1<<(j-1))][j-1]),
bfx[i][j]=max(bfx[i][j-1],bfx[i+(1<<(j-1))][j-1]),
bfn[i][j]=min(bfn[i][j-1],bfn[i+(1<<(j-1))][j-1]);
}
inline int bzMAX(int x,int y){int s=lb[y-x+1];return max(bzx[x][s],bzx[y-(1<<s)+1][s]);}
inline int bzMIN(int x,int y){int s=lb[y-x+1];return min(bzn[x][s],bzn[y-(1<<s)+1][s]);}
inline int bfMAX(int x,int y){int s=lb[y-x+1];return max(bfx[x][s],bfx[y-(1<<s)+1][s]);}
inline int bfMIN(int x,int y){int s=lb[y-x+1];return min(bfn[x][s],bfn[y-(1<<s)+1][s]);}
inline int bZERO(int x,int y){return(bs0[y]-bs0[x-1]>0);}
signed main(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++)cin>>b[i];
STa(),STb();
for(int i=1;i<=q;i++){
int xa,ya,xb,yb;
cin>>xa>>ya>>xb>>yb;
int afmin=afMAX(xa,ya);
int afmax=afMIN(xa,ya);
int azmax=azMAX(xa,ya);
int azmin=azMIN(xa,ya);
int bfmin=bfMAX(xb,yb);
int bfmax=bfMIN(xb,yb);
int bzmax=bzMAX(xb,yb);
int bzmin=bzMIN(xb,yb);
int azero=aZERO(xa,ya);
int bzero=bZERO(xb,yb);
int aZNohave=(azmin>=inf);
int bZNohave=(bzmin>=inf);
int aFNohave=(!afmax);
int bFNohave=(!bfmax);
//cout<<!aFNohave<<"|";
if(bZNohave){//b只能选负数
if(!aFNohave)cout<<1ll*bfmin*afmax<<"\n";//a也能选负数,成为正数
else if(azero)puts("0");//能选0
else cout<<1ll*bfmax*azmin<<"\n";//a只能选正数
}
else if(bFNohave){//b只能选正数
if(!aZNohave)cout<<1ll*bzmin*azmax<<"\n";//a也能选正数,答案为正数
else if(azero)puts("0");//能选0
else cout<<1ll*bzmax*afmin<<"\n";//a只能选负数
}
else{//b能随便选
if(azero)puts("0");
//由于a选正负数b都能将其变为负数,故0为最优解
else{
if(aFNohave)cout<<1ll*azmin*bfmax<<"\n";//a只能选正数
else if(aZNohave)cout<<1ll*afmin*bzmax<<"\n";//a只能选负数
else{
long long t1=1ll*azmin*bfmax;
long long t2=1ll*afmin*bzmax;
cout<<max(t1,t2)<<"\n";
}
}
}
}fclose(stdin);
fclose(stdout);
return 0;
}//205
//<=老师的意大利炮
// a.revserve();
// string::npos
```
by ______l______ @ 2022-12-11 17:01:20