蒟蒻求助freopen相关事宜
  • 板块学术版
  • 楼主TurE_Elysia
  • 当前回复23
  • 已保存回复23
  • 发布时间2022/10/31 07:32
  • 上次更新2023/10/27 04:46:11
查看原帖
蒟蒻求助freopen相关事宜
423390
TurE_Elysia楼主2022/10/31 07:32

rt,请教一下各位大佬为什么这个代码不加freopen可以正常运行,而加了freopen运行会出错啊,

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring> 
#include<cmath>
using namespace std;
int n,m,q;
int INF=1100000001;
bool flag;
int aa[100001],bb[100001];
struct tree{
	int ma,mi;
}t1[1000010];
tree t2[1000010];
void build1(int l,int r,int x){
	if(l==r){
		t1[x].ma=t1[x].mi=aa[l];
		return ;
	}
	int mid=(l+r)>>1;
	build1(l,mid,x<<1);
	build1(mid+1,r,x<<1|1);
	t1[x].ma=max(t1[x<<1].ma,t1[x<<1|1].ma);
	t1[x].mi=min(t1[x<<1].mi,t1[x<<1|1].mi);
}
void build2(int l,int r,int x){
	if(l==r){
		t2[x].ma=t2[x].mi=bb[l];
		return ;
	}
	int mid=(l+r)>>1;
	build2(l,mid,x<<1);
	build2(mid+1,r,x<<1|1);
	t2[x].ma=max(t2[x<<1].ma,t2[x<<1|1].ma);
	t2[x].mi=min(t2[x<<1].mi,t2[x<<1|1].mi);
}
int ask_t1mi(int l,int r,int x,int L,int R){
	if(L<=l&&R>=r)return t1[x].mi;
	int mid=(l+r)>>1,ans=INF;
	if(L<=mid)ans=min(ans,ask_t1mi(l,mid,x<<1,L,R));
	if(R>mid)ans=min(ans,ask_t1mi(mid+1,r,x<<1|1,L,R));
	return ans;
}
int ask_t2mi(int l,int r,int x,int L,int R){
	if(L<=l&&R>=r)return t2[x].mi;
	int mid=(l+r)>>1,ans=INF;
	if(L<=mid)ans=min(ans,ask_t2mi(l,mid,x<<1,L,R));
	if(R>mid)ans=min(ans,ask_t2mi(mid+1,r,x<<1|1,L,R));
	return ans;
}
int ask_t1ma(int l,int r,int x,int L,int R){
	if(L<=l&&R>=r)return t1[x].ma;
	int mid=(l+r)>>1,ans=-INF;
	if(L<=mid)ans=max(ans,ask_t1ma(l,mid,x<<1,L,R));
	if(R>mid)ans=max(ans,ask_t1ma(mid+1,r,x<<1|1,L,R));
	return ans;
}
int ask_t2ma(int l,int r,int x,int L,int R){
	if(L<=l&&R>=r)return t2[x].ma;
	int mid=(l+r)>>1,ans=-INF;
	if(L<=mid)ans=max(ans,ask_t2ma(l,mid,x<<1,L,R));
	if(R>mid)ans=max(ans,ask_t2ma(mid+1,r,x<<1|1,L,R));
	return ans;
}
void work(){
	int l1,l2,r1,r2;
	int xiaoQ=0,xiaoL=0;
	for(int i=1;i<=q;++i){
		scanf("%d %d %d %d",&l1,&r1,&l2,&r2);
		if(flag==0){
		xiaoL=ask_t1ma(1,n,1,l1,r1);
		xiaoQ=ask_t2mi(1,m,1,l2,r2);
		}
		else {
			if(l1==r1){
				xiaoL=aa[l1];
				if(xiaoL>=0)xiaoQ=ask_t2mi(1,m,1,l2,r2);
				else xiaoQ=ask_t2ma(1,m,1,l2,r2);
			}
			if(l2==r2){
				xiaoQ=bb[l2];
				if(xiaoQ>=0)xiaoL=ask_t1ma(1,n,1,l1,r1);
				else xiaoL=ask_t1mi(1,n,1,l1,r1);
			}
		}
		printf("%lld\n",(long long)xiaoL*xiaoQ);
	}
}
int main(){
	freopen("game.in","r",stdin);
	freopen("game.out","w",stdout);
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=n;++i){
		scanf("%d",&aa[i]);
		if(aa[i]<=0)flag=1;
	}
	for(int i=1;i<=m;++i){
		scanf("%d",&bb[i]);
		if(bb[i]<=0)flag=1;
	}
	build1(1,n,1);
	build2(1,m,1);
	work();
	return 0;
}

甚至说我在D盘写好输入文件后,写成这样都没有啥问题

   freopen("D:\\game.in","r",stdin);
	freopen("D:\\game.out","w",stdout);

这是怎么肥四呢

2022/10/31 07:32
加载中...