想把一二题拿到100多分以上,胆汁第一题怎么样例过不了?没用st和线段树,就是暴力想过部分分
by Accepted_please @ 2023-09-19 18:35:09
思路错了哦
by Ericzrj @ 2023-09-19 18:41:48
应该是是要找小Q的最大最小,小L的最大,最小,负数中最大,正数中最小
by Ericzrj @ 2023-09-19 18:43:40
建议看一下题解的思路
by Ericzrj @ 2023-09-19 18:44:26
```
#include<bits/stdc++.h>
using namespace std;
const int ll=100005,inf=INT_MAX;
long long A[ll],B[ll];
long long a1;
long long st;
long long qq[ll];
long long n,m,q;
int main()
{
cin>>n>>m>>q;
for(int i=1;i<=n;i++)
{
cin>>A[i];
}
for(int i=1;i<=m;i++)
{
cin>>B[i];
}
for(int i=1;i<=q;i++)
{
int l1,r1,l2,r2;
cin>>l1>>r1>>l2>>r2;
long long mxl=-inf,mnl=inf,zl=inf,fl=-inf;
long long mxq=-inf,mnq=inf;
for(int j=l1;j<=r1;j++){
mxl=max(mxl,A[j]);
mnl=min(mnl,A[j]);
if(A[j]>=0) zl=min(zl,A[j]);
else fl=max(fl,A[j]);
}
for(int j=l2;j<=r2;j++){
mxq=max(mxq,B[j]);
mnq=min(mnq,B[j]);
}
if(mnq>=0){
if(mxl<=0) cout<<1ll*mxq*mxl<<endl;
else cout<<1ll*mnq*mxl<<endl;
}
else if(mxq<=0){
if(mnl<=0) cout<<1ll*mxq*mnl<<endl;
else cout<<1ll*mnq*mnl<<endl;
}
else{
long long ans;
if(fl!=-inf){
ans=1ll*fl*mxq;
if(zl!=inf) ans=max(ans,1ll*zl*mnq);
}
else ans=1ll*zl*mnq;
cout<<ans<<endl;
}
}
return 0;
}
```
这样打暴力可以过阳历
by Ericzrj @ 2023-09-19 18:57:30
@[Ericzrj](/user/481526) 肥肠感谢!!!
by Accepted_please @ 2023-09-20 18:15:15