社区讨论
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 条回复,欢迎继续交流。
正在加载回复...