为什么我T2在infojRE了,在你谷85?
  • 板块学术版
  • 楼主ass_wecan
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/10/29 21:37
  • 上次更新2023/10/27 05:02:46
查看原帖
为什么我T2在infojRE了,在你谷85?
505805
ass_wecan楼主2022/10/29 21:37

这是我T2的代码,我检查了好像也没有越界啊

当然邀请大家帮我治眼瞎

#include<bits/stdc++.h>
#define int long long 
#define printlf(x) print(x),putchar('\n')
#define printsp(x) print(x),putchar(' ')
using namespace std;
inline int read(){
	int x=0;bool w=0;char c=getchar();
	while(!isdigit(c))	w|=c=='-',c=getchar();
	while(isdigit(c))	x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return w?-x:x;
}
inline void print(int x){
	if(x<0)	putchar('-'),x=-x;
	if(x>9)	print(x/10);
	putchar('0'+x%10);
}
int n,m,Q;
const int maxn=1e5+5,N=1e3+5,INF=LONG_LONG_MAX;
int a[maxn],b[maxn],c[N][N],tree[N][N*3],l1[maxn],r1[maxn],l2[maxn],r2[maxn];
#define ls(x) x<<1
#define rs(x) x<<1|1
#define push_up(x,p) tree[x][p]=min(tree[x][ls(p)],tree[x][rs(p)])
inline void Build(int x,int p,int l,int r){
	if(l==r){
		tree[x][p]=c[x][l];
		return ;
	}
	int mid=l+r>>1;
	Build(x,ls(p),l,mid);
	Build(x,rs(p),mid+1,r);
	push_up(x,p);
}
inline void Pre(){
	for(register int i=1;i<=n;++i){
		for(register int j=1;j<=m;++j)	
			c[i][j]=a[i]*b[j];
	}
//	for(register int i=1;i<=n;++i){
//		for(register int j=1;j<=m;++j)
//			cout<<c[i][j]<<' ';cout<<" carray\n";
//	}
	for(register int i=1;i<=n;++i)
		Build(i,1,1,m);
}
inline int get_min(int x,int p,int l,int r,int pl,int pr){
	if(l>=pl && r<=pr)	return tree[x][p];
	int mid=l+r>>1,res=INF;
	if(pl<=mid)	res=min(res,get_min(x,ls(p),l,mid,pl,pr));
	if(pr>mid)	res=min(res,get_min(x,rs(p),mid+1,r,pl,pr));
	return res;
}
inline int Solve(int x){
	int ans=-INF;
	for(register int i=l1[x];i<=r1[x];++i){
		ans=max(ans,get_min(i,1,1,m,l2[x],r2[x]));
	}
	return ans;
}
inline bool check1(){
	for(register int i=1;i<=n;++i)	
		if(a[i]<=0)	return 0;
	for(register int i=1;i<=m;++i)
		if(b[i]<=0)	return 0;
	return 1;
}
inline bool check2(){
	for(register int i=1;i<=Q;++i){
		if(l1[i]!=r1[i] && l2[i]!=r2[i])	return 0;
	}
	return 1;
}
namespace Subzheng{
	int Max[maxn*3],Min[maxn*3];
	#define ls(x) x<<1
	#define rs(x) x<<1|1
	inline void push_up1(int p){
		Max[p]=max(Max[ls(p)],Max[rs(p)]);
	}
	inline void push_up2(int p){
		Min[p]=min(Min[ls(p)],Min[rs(p)]);
	}
	inline void Build1(int p,int l,int r){
		if(l==r){
			Max[p]=a[l];
			return ;
		}
		int mid=l+r>>1;
		Build1(ls(p),l,mid);
		Build1(rs(p),mid+1,r);
		push_up1(p);
	}
	inline void Build2(int p,int l,int r){
		if(l==r){
			Min[p]=b[l];
			return ;
		}
		int mid=l+r>>1;
		Build2(ls(p),l,mid);
		Build2(rs(p),mid+1,r);
		push_up2(p);
	}
	inline int get_max1(int p,int l,int r,int pl,int pr){
		if(l>=pl && r<=pr)	return Max[p];
		int mid=l+r>>1,res=-INF;
		if(pl<=mid)	res=max(res,get_max1(ls(p),l,mid,pl,pr));
		if(pr>mid)	res=max(res,get_max1(rs(p),mid+1,r,pl,pr));
		return res;
	}
	inline int get_min2(int p,int l,int r,int pl,int pr){
		if(l>=pl && r<=pr)	return Min[p];
		int mid=l+r>>1,res=INF;
		if(pl<=mid)	res=min(res,get_min2(ls(p),l,mid,pl,pr));
		if(pr>mid)	res=min(res,get_min2(rs(p),mid+1,r,pl,pr));
		return res;
	}
	inline int solve(int x){
		int res1=get_max1(1,1,n,l1[x],r1[x]);
		int res2=get_min2(1,1,m,l2[x],r2[x]);
		return res1*res2;
	}
	inline void Main(){
//		cout<<"in Main\n";
		Build1(1,1,n);
		Build2(1,1,m);
		for(register int i=1;i<=Q;++i){
			printlf(solve(i));
		}
		exit(0);
	}
}
namespace Subsame{
	int Max1[maxn*3],Min1[maxn*3],Min2[maxn*3],Max2[maxn*3];
	#define ls(x) x<<1
	#define rs(x) x<<1|1
	inline void push_up1(int p){
		Min1[p]=min(Min1[ls(p)],Min1[rs(p)]);
		Max1[p]=max(Max1[ls(p)],Max1[rs(p)]);
	}
	inline void push_up2(int p){
		Min2[p]=min(Min2[ls(p)],Min2[rs(p)]);
		Max2[p]=max(Max2[ls(p)],Max2[rs(p)]);
	}
	inline void Build1(int p,int l,int r){
		if(l==r){
			Max1[p]=a[l];
			Min1[p]=a[l];
			return ;
		}
		int mid=l+r>>1;
		Build1(ls(p),l,mid);
		Build1(rs(p),mid+1,r);
		push_up1(p);
	}
	inline void Build2(int p,int l,int r){
		if(l==r){
			Min2[p]=b[l];
			Max2[p]=b[l];
			return ;
		}
		int mid=l+r>>1;
		Build2(ls(p),l,mid);
		Build2(rs(p),mid+1,r);
		push_up2(p);
	}
	inline int get_max1(int p,int l,int r,int pl,int pr){
		if(l>=pl && r<=pr)	return Max1[p];
		int mid=l+r>>1,res=-INF;
		if(pl<=mid)	res=max(res,get_max1(ls(p),l,mid,pl,pr));
		if(pr>mid)	res=max(res,get_max1(rs(p),mid+1,r,pl,pr));
		return res;
	}
	inline int get_min1(int p,int l,int r,int pl,int pr){
		if(l>=pl && r<=pr)	return Min1[p];
		int mid=l+r>>1,res=INF;
		if(pl<=mid)	res=min(res,get_min1(ls(p),l,mid,pl,pr));
		if(pr>mid)	res=min(res,get_min1(rs(p),mid+1,r,pl,pr));
		return res;	
	}
	inline int get_min2(int p,int l,int r,int pl,int pr){
		if(l>=pl && r<=pr)	return Min2[p];
		int mid=l+r>>1,res=INF;
		if(pl<=mid)	res=min(res,get_min2(ls(p),l,mid,pl,pr));
		if(pr>mid)	res=min(res,get_min2(rs(p),mid+1,r,pl,pr));
		return res;
	}
	inline int get_max2(int p,int l,int r,int pl,int pr){
		if(l>=pl && r<=pr)	return Max2[p];
		int mid=l+r>>1,res=-INF;
		if(pl<=mid)	res=max(res,get_max2(ls(p),l,mid,pl,pr));
		if(pr>mid)	res=max(res,get_max2(rs(p),mid+1,r,pl,pr));
		return res;
	}
	inline int solve(int x){
		if(l1[x]==r1[x]){
			if(a[l1[x]]>0)	return get_min2(1,1,m,l2[x],r2[x])*a[l1[x]];
			else	return get_max2(1,1,m,l2[x],r2[x])*a[l1[x]];
		}
		if(l2[x]==r2[x]){
			if(b[l2[x]]>0)	return get_max1(1,1,n,l1[x],r1[x])*b[l2[x]];
			else	return get_min1(1,1,n,l1[x],r1[x])*b[l2[x]];
		}
	}
	inline void Main(){
//		cout<<"in Main\n";
		Build1(1,1,n);
		Build2(1,1,m);
		for(register int i=1;i<=Q;++i){
			printlf(solve(i));
		}
		exit(0);
	}
}
signed main(){
//	freopen("game.in","r",stdin);
//	freopen("game.out","w",stdout);
	n=read(),m=read(),Q=read();
	for(register int i=1;i<=n;++i)	a[i]=read();
	for(register int i=1;i<=m;++i)	b[i]=read();
//	cout<<" ininin\n";
	for(register int i=1;i<=Q;++i)	l1[i]=read(),r1[i]=read(),l2[i]=read(),r2[i]=read();	
//	cout<<" read over\n";
	if(check1())	Subzheng::Main();
	if(check2())	Subsame::Main();
	Pre();
	for(register int i=1;i<=Q;++i){
		printlf(Solve(i));
	}
	return 0;
}


2022/10/29 21:37
加载中...