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);
这是怎么肥四呢