求助,真不知道为什么全错
  • 板块灌水区
  • 楼主yyyymh
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/10 15:06
  • 上次更新2023/11/10 15:06:46
查看原帖
求助,真不知道为什么全错
499746
yyyymh楼主2023/11/10 15:06

题目: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显示每一个我都输出的零(记录),真不知道这怎么回事,麻烦大家帮忙看一眼,谢谢

2023/11/10 15:06
加载中...