WA100pts求调
查看原帖
WA100pts求调
386892
REMAC楼主2023/10/2 20:22

rt,Unaccept 100pts.

孩子卡了2h了,求调QwQ

#include<bits/stdc++.h>
using namespace std;
#define int __int128
using LL=long long;

const int maxn=1e5+10;

int L[maxn];

void Linit(int n) {
	L[1]=0;
	for(int i=2;i<=n;i++) L[i]=L[i/2]+1;
}

auto mmin= [](int a,int b)->int{return min(a,b);};
auto mmax= [](int a,int b)->int{return max(a,b);};
auto mabsmin= [](int a,int b)->int{return llabs(a)<llabs(b)?a:b;};
LL n;
struct STable {
	int c[maxn][17];
	function<int(int,int)> op;
	
	STable(function<int(int,int)> op):op(op){};
	void build() {
		for(int k=1;k<=L[n];k++) {
			for(int i=1;i+(1<<k)-1<=n;i++) {
				c[i][k]=op(c[i][k-1],c[i+(1<<(k-1))][k-1]);
			}
		}
	}
	
	int query(int l,int r) {
		if(l==r) return  c[l][0];
		int k=L[r-l+1];
		return op(c[l][k],c[r-(1<<k)+1][k]);
	}
}   mn1(mmin),mn0(mmin),mx1(mmax),mx0(mmax),zn1(mabsmin),zn0(mabsmin),zp1(mabsmin),zp0(mabsmin);
int inf=0x3fffffffffffff3f;
main() {
	LL m,q,_;
	cin>>n>>m>>q;
	Linit(n);
	for(int i=1;i<=n;i++) cin>>_,mx0.c[i][0]=mn0.c[i][0]=_,zp0.c[i][0]=(_<0?inf:_),zn0.c[i][0]=(_>0?-inf:_);
	for(int i=1;i<=m;i++) cin>>_,mx1.c[i][0]=mn1.c[i][0]=_;
	mn0.build();mx0.build();zp0.build();zn0.build();
	mn1.build();mx1.build();
	
	while(q--) {
		LL l1,r1,l2,r2;
		cin>>l1>>r1>>l2>>r2;
		int x,y;
		if(mn1.query(l2,r2)<0) {
			if(mx1.query(l2,r2)<=0) {
				x=mn0.query(l1,r1);
			}else {
				if(mx1.query(l2,r2)*zn0.query(l1,r1)<mn1.query(l2,r2)*zp0.query(l1,r1)) x=zp0.query(l1,r1);
				else x=zn0.query(l1,r1);
			}
		}else {
			x=mx0.query(l1,r1);
		}
		
		if(x>0) {
			y=mn1.query(l2,r2);
		}else if(x<0) {
			y=mx1.query(l2,r2);
		}else y=0;
		cout<<(LL)(x*y)<<'\n';
	}
}
2023/10/2 20:22
加载中...