这个人好像经常写一些bug
#include <bits/stdc++.h>
using namespace std;
long long a[100000000];
void find(int l,int r)
{
long long ans=1,ans2=1;
int s1=r,s2,cnt=0;
//cnt记录负数个数
for(int i=l;i<=r;i++)
if(a[i]<0)
cnt++;
if(cnt%2==0) // 负数个数为偶数时 最大的值就是所有数之积
{
for(int i=l;i<=r;i++)
{
ans*=a[i];
if(ans>1073741824)
{
cout<<"Too large"<<endl;
return;
}
}
}
else // 负数个数为奇数时
{
for(int i=l;i<=r;i++)
if(a[i]<0)
{
s1=i;
break;
} // s1存第一个负数位置,S2存第二个负数位置
for(int i=r;i>=l;i--)
if(a[i]<0)
{
s2=i;
break;
}
for(int i=s1+1;i<=r;i++) //舍去第一个负数之前的所有数之积
{
ans*=a[i];
if(ans>1073741824)
{
cout<<"Too large"<<endl;
return;
}
}
for(int i=l;i<s2;i++) //舍去最后一个负数之后的所有数之积
{
ans2*=a[i];
if(ans2>1073741824)
{
cout<<"Too large"<<endl;
return;
}
}
}
cout<<max(ans,ans2)<<endl;
return;
}
int main()
{
// freopen("T1ex2.in","r",stdin);
// freopen("T1ex2.out","w",stdout);
int n,q,m,c,b,j;
long long k;
//shuru
cin>>n>>q;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=q;i++)
{
cin>>m;
//1
if(m==1)
{
cin>>j>>k;
a[j]=k;
}
else
{
//2
cin>>c>>b;
find(c,b);
}
}
return 0;
}