离奇错误的,大佬求助!!!
查看原帖
离奇错误的,大佬求助!!!
551803
BPG_ning楼主2022/10/3 21:37

这是我的暴力代码,freopen输出的是错的,但正常输出没问题

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10,inf=1<<30;
typedef long long LL;
int n,q,a[maxn];
int main(){
	ios::sync_with_stdio(false);
	std::cin.tie(0);
	std::cout.tie(0);
	freopen("cnm.in","r",stdin);
	freopen("cnm.out","w",stdout); 
	cin>>n>>q;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int cnmd=1;cnmd<=q;cnmd++){
		int op,l,r;
		cin>>op>>l>>r;
		if(op==1){a[l]=r;continue;}
		bool f=0,dnmd=0;
		LL sum=0,Max=1;
		for(int i=l;i<=r;i++){
			sum+=(a[i]<0);
			Max=Max*a[i];
			if(Max>inf) Max=0,dnmd=1;
		} 
		if(sum%2==0){
			if(dnmd) puts("Too large");
			else cout<<Max<<endl;
			f=1;
			continue;
		}
		int p1=l-1,p2=r+1;
		for(int i=l;i<=r;i++) if(a[i]<0){p1=i;break;}
		for(int i=r;i>=l;i--) if(a[i]<0){p2=i;break;}
		LL Max1=1,Max2=1;
		for(int i=l;i<=p2-1;i++){
			Max1=Max1*a[i];
			if(Max1>inf){
				f=1;
				break;
			}
		}
		if(f){
			puts("Too large");
			continue;
		}
		for(int i=p1+1;i<=r;i++){
			Max2=Max2*a[i];
			if(Max2>inf){
				f=1;
				break;
			}
		}
		if(f){
			puts("Too large");
			continue;
		}
		if(!f)cout<<max(Max1,Max2)<<endl;
	}
	return 0;
}
/*
6
1 1 4 5 1 4
4 6
*/
2022/10/3 21:37
加载中...