求助,前半部分全wa

P8818 [CSP-S 2022] 策略游戏

[额](https://www.luogu.com.cn/record/92476720) 怎么说呢,不开long long见祖宗 还有,你这个算法是暴力 $O(qn)$ 的, $1e5$ 的数据你跑不过去,建议用 ST 表 在你代码上随便修改了一下,能过 $1,2,3,6,7,8,9$ ```cpp #include<bits/stdc++.h> using namespace std; int n,m,q; long long a[100005],b[100005]; int l1,l2,r1,r2; int ms; int main() { cin>>n>>m>>q; ms=1; for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); if(a[i]<=0) ms=0; } for(int i=1;i<=m;i++) { scanf("%lld",&b[i]); if(b[i]<=0) ms=0; } while(q--) { long long lmaxx=0,rminx=0x7f7f7f7f,lminx=0x7f7f7f7f,rmaxx=0; scanf("%d%d%d%d",&l1,&r1,&l2,&r2); if(ms==1) { for(int i=l1;i<=r1;i++) lmaxx=max(lmaxx,a[i]),lminx=min(lminx,a[i]); for(int i=l2;i<=r2;i++) rmaxx=max(lmaxx,b[i]),rminx=min(rminx,b[i]); printf("%lld\n",lmaxx*rminx); continue; } if(l1==r1) { lmaxx=lminx=a[r1]; int have0=0; for(int i=l2;i<=r2;i++) { rmaxx=max(rmaxx,b[i]),rminx=min(rminx,b[i]); if(b[i]==0) have0=1; } if(lmaxx>0) printf("%lld\n",lmaxx*rminx); if(lmaxx<0) printf("%lld\n",lmaxx*rmaxx); if(lmaxx==0) printf("0\n"); continue; } if(l2==r2) { rmaxx=rminx=b[r2]; for(int i=l1;i<=r1;i++) lmaxx=max(lmaxx,a[i]),lminx=min(lminx,a[i]); if(rmaxx>0) printf("%lld\n",rmaxx*lmaxx); if(rmaxx<0) printf("%lld\n",rmaxx*lminx); if(rmaxx==0) printf("0\n"); continue; } } return 0; } ```
by lenlen @ 2022-11-01 19:44:57


|