这是我的暴力代码,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
*/