蒟蒻求救0pts玄二关
查看原帖
蒟蒻求救0pts玄二关
1202695
Junior_Young楼主2025/1/12 15:43

改之前15pts:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,INF=0x7f7f7f7f;
#define int long long
int a[N],b[N],f[7][N][20];
int n,m,T,l1,r1,l2,r2;
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>m>>T;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		f[1][i][0]=a[i];
		f[2][i][0]=a[i];
		if(a[i]<0) f[3][i][0]=a[i],f[4][i][0]=INF;
		if(a[i]>0) f[3][i][0]=-INF,f[4][i][0]=a[i];
	}
	for(int i=1;i<=m;i++)
	{
		cin>>b[i];
		f[5][i][0]=b[i];
		f[6][i][0]=b[i];
	}
	for(int j=1;(1<<j)<=n;j++)
		for(int i=1;i+(1<<j)-1<=n;i++)
			f[1][i][j]=max(f[1][i][j-1],f[1][i+(1<<j-1)][j-1]),
			f[2][i][j]=min(f[2][i][j-1],f[2][i+(1<<j-1)][j-1]),
			f[3][i][j]=max(f[3][i][j-1],f[3][i+(1<<j-1)][j-1]),
			f[4][i][j]=min(f[4][i][j-1],f[4][i+(1<<j-1)][j-1]);
	for(int j=1;(1<<j)<=m;j++)
		for(int i=1;i+(1<<j)<=n;i++)
			f[5][i][j]=max(f[5][i][j-1],f[5][i+(1<<j-1)][j-1]),
			f[6][i][j]=min(f[6][i][j-1],f[6][i+(1<<j-1)][j-1]);
	while(T--)
	{
		cin>>l1>>r1>>l2>>r2;
		int AC=log2(r1-l1+1);
		int X1=max(f[1][l1][AC],f[1][r1-(1<<AC)+1][AC]);
		int X2=min(f[2][l1][AC],f[2][r1-(1<<AC)+1][AC]);
		int X3=max(f[3][l1][AC],f[3][r1-(1<<AC)+1][AC]);
		int X4=min(f[4][l1][AC],f[4][r1-(1<<AC)+1][AC]);
		AC=log2(r2-l2+1);
		int X5=max(f[5][l2][AC],f[5][r2-(1<<AC)+1][AC]);
		int X6=min(f[6][l2][AC],f[6][r2-(1<<AC)+1][AC]);
		int ans=-INF;
		if(X5<=0) ans=max(X2*X5,ans);
		else ans=max(X3*X5,ans);
		if(X6<=0) ans=max(X4*X6,ans);
		else ans=max(X1*X6,ans);
		cout<<ans<<'\n';
	}
	return 0;
}

改之后0pts:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
#define int long long
const int INF=1e18+8;
int a[N],b[N],f[7][N][20];
int n,m,T,l1,r1,l2,r2;
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>m>>T;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		f[1][i][0]=a[i];
		f[2][i][0]=a[i];
		if(a[i]<0) f[3][i][0]=a[i],f[4][i][0]=INF;
		if(a[i]>0) f[3][i][0]=-INF,f[4][i][0]=a[i];
	}
	for(int i=1;i<=m;i++)
	{
		cin>>b[i];
		f[5][i][0]=b[i];
		f[6][i][0]=b[i];
	}
	for(int j=1;(1<<j)<=n;j++)
		for(int i=1;i+(1<<j)-1<=n;i++)
			f[1][i][j]=max(f[1][i][j-1],f[1][i+(1<<j-1)][j-1]),
			f[2][i][j]=min(f[2][i][j-1],f[2][i+(1<<j-1)][j-1]),
			f[3][i][j]=max(f[3][i][j-1],f[3][i+(1<<j-1)][j-1]),
			f[4][i][j]=min(f[4][i][j-1],f[4][i+(1<<j-1)][j-1]);
	for(int j=1;(1<<j)<=m;j++)
		for(int i=1;i+(1<<j)<=n;i++)
			f[5][i][j]=max(f[5][i][j-1],f[5][i+(1<<j-1)][j-1]),
			f[6][i][j]=min(f[6][i][j-1],f[6][i+(1<<j-1)][j-1]);
	while(T--)
	{
		cin>>l1>>r1>>l2>>r2;
		int AC=log2(r1-l1+1);
		int X1=max(f[1][l1][AC],f[1][r1-(1<<AC)+1][AC]);
		int X2=min(f[2][l1][AC],f[2][r1-(1<<AC)+1][AC]);
		int X3=max(f[3][l1][AC],f[3][r1-(1<<AC)+1][AC]);
		int X4=min(f[4][l1][AC],f[4][r1-(1<<AC)+1][AC]);
		AC=log2(r2-l2+1);
		int X5=max(f[5][l2][AC],f[5][r2-(1<<AC)+1][AC]);
		int X6=min(f[6][l2][AC],f[6][r2-(1<<AC)+1][AC]);
		int ans=-INF;
		if(X5<=0) ans=max(X2*X5,ans);
		else ans=max(X3*X5,ans);
		if(X6<=0) ans=max(X4*X6,ans);
		else ans=max(X1*X6,ans);
		cout<<ans<<'\n';
	}
	return 0;
}

求救,为什么都开long long了还错?望大佬指教。

2025/1/12 15:43
加载中...