代码如下,AC#1#2#14~16
#include<bits/stdc++.h>
using namespace std;
struct node{long long O;}o;
const long long large=1073741824;
long long n,q,a[2000010],b[2000010];
long long l,r;
int main(){
cin>>n>>q;
for(long long i=1;i<=n;i++){
cin>>a[i];
b[i]=b[i-1];
if(a[i]<0) b[i]++;
}
for(long long i=1;i<=q;i++){
cin>>o.O;
if(o.O==1){
cin>>l>>r;
if(a[l]<0&&r>0) for(long long i=l;i<=n;i++)b[i]--;
if(a[l]>0&&r<0) for(long long i=l;i<=n;i++)b[i]++;
a[l]=r;
}
else{
long long ans=1,minn=-114514,help=1;
bool flag1=0,flag2=0;
cin>>l>>r;
if(l==r){
cout<<max(a[l],(long long)1)<<endl;
continue;
}
if(r-l>=70){
cout<<"Too large"<<endl;
continue;
}
if((b[r]-b[l-1])%2){
for(long long i=l;i<=r;i++){
if(flag1==0&&a[i]<0){
flag1=1;
continue;
}
if(flag1==1)help*=a[i];
}
for(long long i=r;i>=l;i--){
if(flag2==0&&a[i]<0){
flag2=1;
continue;
}
if(flag2==1)ans*=a[i];
}
if(max(help,ans)>large){
cout<<"Too large"<<endl;
continue;
}
cout<<max(help,ans)<<endl;
continue;
}
for(long long i=l;i<=r;i++) ans*=a[i];
if(ans>large){
cout<<"Too large"<<endl;
continue;
}
cout<<ans<<endl;
}
}
return 0;
}