你说得对,但是我悬赏4关
查看原帖
你说得对,但是我悬赏4关
540363
AKPC楼主2023/8/4 17:14
#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
    int x=0;bool f=1;register char c=getchar();
    while (c<48||c>57){if(c=='-') f=0;c=getchar();}
    while (c>=48&&c<=57){x=x*10+(c^48);c=getchar();}
    return f?x:-x;
}
const int inf=1e17;
int n,m,q,ap[100005][21],at[100005][21],ax[100005][21],ay[100005][21],bp[100005][21],bt[100005][21],x,l1,r1,l2,r2;
//p为max,t为min,x处理正数最小,y处理负数最大
inline void iap() {for (register int j=1;j<=21;j++) for (register int i=1;i+(1<<j)-1<=n;i++) ap[i][j]=max(ap[i][j-1],ap[i+(1<<(j-1))][j-1]);}
inline int qap(int l,int r) {int k=log2(r-l+1);return max(ap[l][k],ap[r-(1<<k)+1][k]);}
inline void iat() {for (register int j=1;j<=21;j++) for (register int i=1;i+(1<<j)-1<=n;i++) at[i][j]=min(at[i][j-1],at[i+(1<<(j-1))][j-1]);}
inline int qat(int l,int r) {int k=log2(r-l+1);return min(at[l][k],at[r-(1<<k)+1][k]);}
inline void ibp() {for (register int j=1;j<=21;j++) for (register int i=1;i+(1<<j)-1<=m;i++) bp[i][j]=max(bp[i][j-1],bp[i+(1<<(j-1))][j-1]);}
inline int qbp(int l,int r) {int k=log2(r-l+1);return max(bp[l][k],bp[r-(1<<k)+1][k]);}
inline void ibt() {for (register int j=1;j<=21;j++) for (register int i=1;i+(1<<j)-1<=m;i++) bt[i][j]=min(bt[i][j-1],bt[i+(1<<(j-1))][j-1]);}
inline int qbt(int l,int r) {int k=log2(r-l+1);return min(bt[l][k],bt[r-(1<<k)+1][k]);}
inline void iax() {for (register int j=1;j<=21;j++) for (register int i=1;i+(1<<j)-1<=n;i++) ax[i][j]=min(ax[i][j-1],ax[i+(1<<(j-1))][j-1]);}
inline int qax(int l,int r) {int k=log2(r-l+1);return min(ax[l][k],ax[r-(1<<k)+1][k]);}
inline void iay() {for (register int j=1;j<=21;j++) for (register int i=1;i+(1<<j)-1<=n;i++) ay[i][j]=max(ay[i][j-1],ay[i+(1<<(j-1))][j-1]);}
inline int qay(int l,int r) {int k=log2(r-l+1);return max(ay[l][k],ay[r-(1<<k)+1][k]);}
signed main(){
//	freopen("game.in","r",stdin);
//	freopen("game.out","w",stdout);
	n=read(),m=read(),q=read();
	for (register int i=1;i<=n;i++){
		x=read();
		ap[i][0]=at[i][0]=x;
		if (x>=0) x-=inf,ax[i][0]=x,x+=inf;
		else ax[i][0]=x;
		if (x<=0) x+=inf;
		ay[i][0]=x;
	}
	for (register int i=1;i<=m;i++){
		x=read();
		bp[i][0]=bt[i][0]=x;
	}
	iap(),iat(),ibp(),ibt(),iax(),iay();
	while (q--){
		l1=read(),r1=read(),l2=read(),r2=read();
		int aMax=qap(l1,r1),aMin=qat(l1,r1),bMax=qbp(l2,r2),bMin=qbt(l2,r2);
		int aMinp=qax(l1,r1),aMaxt=qay(l1,r1);
		if (aMinp<-1e10) aMinp+=inf;
		if (aMaxt>1e10) aMaxt-=inf;
//		cout<<"sb: "<<aMinp<<' '<<aMaxt<<' '<<bMinp<<' '<<bMaxt<<'\n';
		int ans=-inf,mode[5]={0,aMax,aMin,aMinp,aMaxt};
		for (register int i=1;i<=4;i++){
			if (i==3&&mode[i]<0) continue;
			if (i==4&&mode[i]>0) continue;
			ans=max(ans,mode[i]*=mode[i]>=0?bMin:bMax);
		}
//		for (register int i=1;i<=4;i++) cout<<mode[i]<<' ';
		cout<<ans<<'\n';
	}
	return 0;
}
/*

3 2 2
0 1 -2
-3 4
1 3 1 2
2 3 2 2

6 4 5
3 -1 -2 1 2 0
1 2 -1 -3
1 6 1 4
1 5 1 4
1 4 1 2
2 6 3 4
2 5 2 3

*/

Record\Huge Record

2023/8/4 17:14
加载中...