st表0pts求调

P8818 [CSP-S 2022] 策略游戏

@[brownball](/user/495599) 目测是情况未讨论完呢
by Missdie @ 2023-11-15 07:31:35


@[Missdie](/user/995040) 感谢亲,已改,好消息是有40pts了 ```cpp #include<iostream> #include<cstdio> using namespace std; long long mx=999999999999,nx=-999999999999; int n,m,q; int l1,r1,l2,r2; long long a,b; long long maxx[100010][50],minn[100010][50],z[100010][50],f[100010][50]; //用于存储a数组的最大,最小,正区间最小,负区间最大 long long b1[100010][50],b2[100010][50]; //用于存储b数组的最大值和最小值 long long lg1[100010]={-1},lg2[100010]={-1}; //倍增 int main(){ //freopen("1.in","r",stdin); //freopen("1.out","w",stdout); scanf("%d%d%d",&n,&m,&q); for(int i=1;i<=n;i++){ scanf("%lld",&a); lg1[i]=lg1[i/2]+1; maxx[i][0]=a; minn[i][0]=a; if(a>=0)z[i][0]=a; else z[i][0]=mx; if(a<0)f[i][0]=a; else f[i][0]=nx; } for(int i=1;i<=m;i++){ scanf("%lld",&b); lg2[i]=lg2[i/2]+1; b1[i][0]=b; b2[i][0]=b; }//输入 for(int i=1;i<=lg1[n];i++){ for(int j=1;j+(1<<i)-1<=n;j++){ int p=j+(1<<(i-1)); maxx[j][i]=max(maxx[j][i-1],maxx[p][i-1]); minn[j][i]=min(minn[j][i-1],minn[p][i-1]); z[j][i]=min(z[j][i-1],z[p][i-1]); f[j][i]=max(f[j][i-1],f[p][i-1]); } } for(int i=1;i<=lg2[m];i++){ for(int j=1;j+(1<<i)-1<=n;j++){ int p=j+(1<<(i-1)); b1[j][i]=max(b1[j][i-1],b1[p][i-1]); b2[j][i]=min(b2[j][i-1],b2[p][i-1]); } }//a和b的st表预处理 long long maxa,maxb;//a和b的选值 long long zz1,zz2,zz3,zz4,zz;//4种情况 long long a1,a2,a3,a4,bx,by;//6个值 int len1,len2,p1,p2; //最后求值 for(int i=1;i<=q;i++){ scanf("%d%d%d%d",&l1,&r1,&l2,&r2); len1=lg1[r1-l1+1];len2=lg2[r2-l2+1]; p1=r1-(1<<len1)+1;p2=r2-(1<<len2)+1; zz1=zz2=zz3=zz4=nx;//初始化 bx=max(b1[l2][len2],b1[p2][len2]);//最大 by=min(b2[l2][len2],b2[p2][len2]);//最小 a1=max(maxx[l1][len1],maxx[p1][len1]);//最大(正数 a2=min(minn[l1][len1],minn[p1][len1]);//最小(负数 a3=min(z[l1][len1],z[p1][len1]);//正数最小 a4=max(f[l1][len1],f[p1][len1]);//负数最大 if(a1>=0)zz1=a1*by; else zz1=a1*bx; if(a2<0)zz2=a2*bx; else zz2=a2*by; if(a3!=mx)zz3=a3*by; if(a4!=nx)zz4=a4*bx; zz=max(max(zz1,zz2),max(zz3,zz4)); printf("%lld\n",zz); } return 0; } ```
by CSZD @ 2023-11-15 08:10:28


应该还有全是负或全是正的? @[brownball](/user/495599)
by Missdie @ 2023-11-15 08:13:56


|