社区讨论

0分求调

P8818[CSP-S 2022] 策略游戏参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mjxs2fkm
此快照首次捕获于
2026/01/03 12:03
2 个月前
此快照最后确认于
2026/01/06 17:50
2 个月前
查看原帖
代码:
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
const int INF=1e18;
int n,m,q,a[N],b[N],lazy[N*4],k,x,y,c[N],d[N],t;
int seg1[N*4],seg2[N*4],seg3[N*4],seg4[N*4];
int x1,x2,x3,x4;
int my_max(int a,int b)
{
    return max(a,b);
}
int my_min(int a,int b)
{
    return min(a,b);
}
void p_u1(int d,int seg[])
{
    seg[d]=min(seg[d*2],seg[d*2+1]);
}
void p_u2(int d,int seg[])
{
    seg[d]=max(seg[d*2],seg[d*2+1]);
}
void build(int d,int l,int r,int seg[],int c[],void (*p_u)(int,int[]))          
{
    if(l==r) {seg[d]=c[l];return;}
    int mid=(l+r)/2;
    build(d*2,l,mid,seg,c,p_u);
    build(d*2+1,mid+1,r,seg,c,p_u);
    p_u(d,seg);
}
int qust(int pos,int l,int r,int seg[],int (*cmp)(int,int))
{
    if(x<=l&&r<=y) return seg[pos];
    int sum=(cmp==my_min)?INF:-INF;
    int mid=(l+r)/2;
    if(mid>=x) sum=cmp(sum,qust(pos*2,l,mid,seg,cmp));
    if(mid<y) sum=cmp(sum,qust(pos*2+1,mid+1,r,seg,cmp));
    return sum;
}
signed main()
{
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++)
    {
        cin>>t;
        if(t>=0)
        {
            a[i]=t;
            b[i]=-INF;
        }else{
            a[i]=INF;
            b[i]=t;
        }
    }
    for(int i=1;i<=m;i++)
    {
        cin>>t;
        if(t>=0)
        {
            c[i]=t;
            d[i]=INF;
        }else{
            c[i]=-INF;
            d[i]=t;
        }
    }
    build(1,1,n,seg1,a,p_u1);
    build(1,1,n,seg2,b,p_u2);
    build(1,1,m,seg3,c,p_u2);
    build(1,1,m,seg4,d,p_u1);
    while(q--)
    {
        cin>>x1>>x2>>x3>>x4;
        x=x1;y=x2;
        int azxz=qust(1,1,n,seg1,my_min);
        int azdf=qust(1,1,n,seg2,my_max);
        x=x3;y=x4;
        int bzdz=qust(1,1,m,seg3,my_max);
        int bzxf=qust(1,1,m,seg4,my_min);
        cout<<max(azdf*bzdz,azxz*bzxf)<<endl;
    }
    return 0;
}
有关注

回复

0 条回复,欢迎继续交流。

正在加载回复...