0pts求调
查看原帖
0pts求调
734065
oya157楼主2024/10/14 18:29
#include<bits/stdc++.h>
using namespace std;
int f1[100010][20],f2[100010][20];
long long x[100010],y[100010];
int main()
{
    int n1,n2,q;;
    cin>>n1>>n2>>q;
    for(int i=1;i<=n1;i++)scanf("%d",&f1[i][0]);
	for(int i=1;i<=n2;i++)scanf("%d",&f2[i][0]);
	
	int p1=log(n1)/log(2);
	for(int j=1;j<=p1;j++)
	{
		for(int i=1;i<=n1-(1<<j)+1;i++)
		{
			f1[i][j]=max(f1[i][j-1],f1[i+(1<<(j-1))][j-1]);
		}
	}
	for(int i=1;i<=q;i++)
	{
		int l,r;
		scanf("%d%d",&l,&r);
		int p2=log(r-l+1)/log(2);
		x[i]=max(f1[l][p2],f1[r-(1<<p2)+1][p2]);
	}
	
	int p11=log(n2)/log(2);
	for(int j=1;j<=p11;j++)
	{
		for(int i=1;i<=n2-(1<<j)+1;i++)
		{
			f2[i][j]=max(f2[i][j-1],f2[i+(1<<(j-1))][j-1]);
		}
	}
	for(int i=1;i<=q;i++)
	{
		int l,r;
		scanf("%d%d",&l,&r);
		int p22=log(r-l+1)/log(2);
		y[i]=max(f2[l][p22],f2[r-(1<<p22)+1][p22]);
	}
	
	for(int i=1;i<=q;i++)
	{
		cout<<x[i]*y[i]<<endl;
	 } 
    return 0;
}
2024/10/14 18:29
加载中...