1-5WA,6-20RE
样例输出全是0
using namespace std;
int n,m,q,l1,l2,r1,r2;
int A[114514],B[114514];
int sta[114514][100][4],stb[114514][100][2],lg[100];
int posma,posmi,negma,negmi,mab,mib;
long long ans;
void init_A();
void init_B();
void init_find(int i,int j,int i2,int j2);
int main()
{
for (int i = 2,M=max(m,n); i <= M; ++i)
lg[i] = lg[i / 2] + 1;//初始化log2(N)
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
scanf("%d",&A[i]);
}
init_A();
for(int i=1;i<=m;i++){
scanf("%d",&B[i]);
}
init_B();//输入和初始化
while(q--){
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
init_find(l1,r1,l2,r2);//查找
if(mab<0){
if(negmi==INT_MAX)printf("%d",mab*posmi);
else printf("%d",mab*negmi);
}
else if(mib>0)
{
if(posma==INT_MIN)printf("%d",mib*negma);
else printf("%d",mab*posma);
}
else{
if(posma==INT_MIN){
printf("%d",mab*negma);
}
else if(negmi==INT_MAX){
printf("%d",mib*posmi);
}
else{
printf("%d",max(mab*negma,mib*posmi));
}
}
}
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////
void init_A()
{
for(int i=1;i<=n;i++)
{
if(A[i]>=0){
sta[i][0][1]=A[i];sta[i][0][0]=A[i];
sta[i][0][2]=INT_MIN;sta[i][0][3]=INT_MAX;
}
else {
sta[i][0][1]=INT_MIN;sta[i][0][0]=INT_MAX;
sta[i][0][2]=A[i];sta[i][0][3]=A[i];
}
}
int k =lg[n];
for(int j=1;j<=k;j++)
for(int i=n;i>=1;i--)
if(i+(1<<(j-1))<=n){
sta[i][j][0]=min(sta[i][j-1][0],sta[i+(1<<(j-1))][j-1][0]);
sta[i][j][1]=max(sta[i][j-1][1],sta[i+(1<<(j-1))][j-1][1]);
sta[i][j][2]=min(sta[i][j-1][2],sta[i+(1<<(j-1))][j-1][2]);
sta[i][j][3]=max(sta[i][j-1][3],sta[i+(1<<(j-1))][j-1][3]);
}
return;
}
void init_B()
{
for(int i=1;i<=n;i++)
{
if(A[i]>=0){
stb[i][0][1]=B[i];stb[i][0][0]=B[i];
stb[i][0][2]=INT_MAX;stb[i][0][3]=INT_MIN;
}
else {
stb[i][0][1]=INT_MIN;stb[i][0][0]=INT_MAX;
stb[i][0][2]=B[i];stb[i][0][3]=B[i];
}
}
int k =lg[n];
for(int j=1;j<=k;j++)
for(int i=n;i>=1;i--)
if(i+(1<<(j-1))<=n)
{
stb[i][j][0]=min(stb[i][j-1][0],stb[i+(1<<(j-1))][j-1][0]);
stb[i][j][1]=max(stb[i][j-1][1],stb[i+(1<<(j-1))][j-1][1]);
}
return;
}
void init_find(int i,int j,int i2,int j2)
{
int k=lg[j-i+1],k2=lg[j2-i2+1];
posma=max(sta[i][k][0],sta[j+(1<<k)+1][k][0]);
posmi=min(sta[i][k][1],sta[j+(1<<k)+1][k][1]);
negma=max(sta[i][k][2],sta[j+(1<<k)+1][k][2]);
negmi=min(sta[i][k][3],sta[j+(1<<k)+1][k][3]);
mab=max(stb[i2][k][0],stb[j2+(1<<k)+1][k][0]);
mib=min(stb[i2][k][1],stb[j2+(1<<k)+1][k][1]);
}