题目:P8818
code:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100005
#define MA 1e18+5
#define MI -1e18-5
ll qz1[N],qz2[N];
ll n,m,L[N],a[N],b[N],mema[N],memb[N],f1[N][25],f2[N][25],f3[N][25],f4[N][25],f5[N][25],f6[N][25],f7[N][25],f8[N][25];
void work(){
for(ll i=2;i<=100005;i++){
L[i]=L[i/2]+1;
}
}
void st1(){
for(ll i=1;i<=n;i++){
if(mema[i]<=0){
a[i]=MI;
}
else{
a[i]=mema[i];
}
}
for(ll i=1;i<=n;i++){
f1[i][0]=a[i];
}
for(ll j=1;j<=20;j++){
for(ll i=1;i+(1<<j)-1<=n;i++){
f1[i][j]=max(f1[i][j-1],f1[i+(1<<j-1)][j-1]);
}
}
}
void st2(){
for(ll i=1;i<=n;i++){
if(mema[i]<=0){
a[i]=MA;
}
else{
a[i]=mema[i];
}
}
for(int i=1;i<=n;i++){
f2[i][0]=a[i];
}
for(ll j=1;j<=20;j++){
for(ll i=1;i+(1<<j)-1<=n;i++){
f2[i][j]=min(f2[i][j-1],f2[i+(1<<j-1)][j-1]);
}
}
}
void st3(){
for(ll i=1;i<=n;i++){
if(mema[i]>=0){
a[i]=MI;
}
else{
a[i]=mema[i];
}
}
for(ll i=1;i<=n;i++){
f3[i][0]=a[i];
}
for(int j=1;j<=20;j++){
for(ll i=1;i+(1<<j)-1<=n;i++){
f3[i][j]=max(f3[i][j-1],f3[i+(1<<j-1)][j-1]);
}
}
}
void st4(){
for(ll i=1;i<=n;i++){
if(mema[i]>=0){
a[i]=MA;
}
else{
a[i]=mema[i];
}
}
for(ll i=1;i<=n;i++){
f4[i][0]=a[i];
}
for(ll j=1;j<=20;j++){
for(ll i=1;i+(1<<j)-1<=n;i++){
f4[i][j]=min(f4[i][j-1],f4[i+(1<<j-1)][j-1]);
}
}
}
void st5(){
for(ll i=1;i<=m;i++){
if(memb[i]<=0){
b[i]=MI;
}
else{
b[i]=memb[i];
}
}
for(ll i=1;i<=m;i++){
f5[i][0]=b[i];
}
for(ll j=1;j<=20;j++){
for(ll i=1;i+(1<<j)-1<=m;i++){
f5[i][j]=max(f5[i][j-1],f5[i+(1<<j-1)][j-1]);
}
}
}
void st6(){
for(ll i=1;i<=m;i++){
if(memb[i]<=0){
b[i]=MA;
}
else{
b[i]=memb[i];
}
}
for(ll i=1;i<=m;i++){
f6[i][0]=b[i];
}
for(ll j=1;j<=20;j++){
for(ll i=1;i+(1<<j)-1<=m;i++){
f6[i][j]=min(f6[i][j-1],f6[i+(1<<j-1)][j-1]);
}
}
}
void st7(){
for(ll i=1;i<=m;i++){
if(memb[i]>=0){
b[i]=MI;
}
else{
b[i]=memb[i];
}
}
for(ll i=1;i<=m;i++){
f7[i][0]=b[i];
}
for(ll j=1;j<=20;j++){
for(ll i=1;i+(1<<j)-1<=m;i++){
f7[i][j]=max(f7[i][j-1],f7[i+(1<<j-1)][j-1]);
}
}
}
void st8(){
for(ll i=1;i<=m;i++){
if(memb[i]>=0){
b[i]=MA;
}
else{
b[i]=memb[i];
}
}
for(ll i=1;i<=m;i++){
f8[i][0]=b[i];
}
for(ll j=1;j<=20;j++){
for(ll i=1;i+(1<<j)-1<=m;i++){
f8[i][j]=min(f8[i][j-1],f8[i+(1<<j-1)][j-1]);
}
}
}
ll score(ll l1,ll r1,ll l2,ll r2){
ll ans=MI,t1,t2,c[10],d[10],flag=0,sum;
t1=L[r1-l1+1];
t2=L[r2-l2+1];
c[1]=max(f1[l1][t1],f1[r1-(1<<t1)+1][t1]);
c[2]=min(f2[l1][t1],f2[r1-(1<<t1)+1][t1]);
c[3]=max(f3[l1][t1],f3[r1-(1<<t1)+1][t1]);
c[4]=min(f4[l1][t1],f4[r1-(1<<t1)+1][t1]);
d[1]=max(f5[l2][t2],f5[r2-(1<<t2)+1][t2]);
d[2]=min(f6[l2][t2],f6[r2-(1<<t2)+1][t2]);
d[3]=max(f7[l2][t2],f7[r2-(1<<t2)+1][t2]);
d[4]=min(f8[l2][t2],f8[r2-(1<<t2)+1][t2]);
for(ll i=1;i<=4;i++){
if(c[i]!=MA&&c[i]!=MI){
sum=MA;
for(ll j=1;j<=4;j++){
if(d[j]!=MA&&d[j]!=MI){
flag=1;
sum=min(sum,c[i]*d[j]);
}
}
ans=max(ans,sum);
}
}
if(flag==0) ans=0;
if(ans>0&&qz2[r2]-qz2[l2-1]>0) ans=0;
if(ans<0&&qz1[r1]-qz1[l1-1]>0) ans=0;
return ans;
}
int main(){
//freopen("game.in","r",stdin);
//freopen("game.out","w",stdout);
ll r1,r2,l1,l2,t,q;
scanf("%lld%lld%lld",&n,&m,&q);
for(ll i=1;i<=n;i++){
scanf("%lld",&a[i]);
if(a[i]==0){
qz1[i]=qz1[i-1]+1;
}
else{
qz1[i]=qz1[i-1];
}
mema[i]=a[i];
}
for(ll i=1;i<=m;i++){
scanf("%lld",&b[i]);
if(b[i]==0){
qz2[i]=qz2[i-1]+1;
}
else{
qz2[i]=qz2[i-1];
}
memb[i]=b[i];
}
work();
st1();
st2();
st3();
st4();
st5();
st6();
st7();
st8();
while(q--){
scanf("%lld%lld%lld%lld",&l1,&r1,&l2,&r2);
t=score(l1,r1,l2,r2);
printf("%lld\n",t);
}
return 0;
}
本地测一点问题没有,大数据小数据全过,交上去全是WA显示每一个我都输出的零(记录),真不知道这怎么回事,麻烦大家帮忙看一眼,谢谢