萌新求调tg模拟赛A,70分,错误都出在几百行/几千行,自闭了。
查看原帖
萌新求调tg模拟赛A,70分,错误都出在几百行/几千行,自闭了。
286448
Eason2009楼主2022/10/3 18:10
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=200005;
int n,q,a[N],op,x,y,mx=1ll<<30;
signed main()
{
	cin>>n>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	while(q--)
	{
		cin>>op>>x>>y;
		if(op==1)
		{
			a[x]=y;
			continue;
		}
		if(y-x>=70)
		{
			cout<<"Too large"<<endl;
			continue;
		}
		int cnt=0,ans=1ll,ans1=1ll,ans2=1ll,flag=0,pos=0;
		for(int i=x;i<=y;i++)
		{
			if(a[i]<0) cnt++;
		}
		if(cnt%2==0)
		{
			for(int i=x;i<=y;i++)
			{
				ans*=a[i];
				if(ans>mx)
				{
					flag=1;
					cout<<"Too large"<<endl;
					break;
				}
			}
			if(!flag)
			{
				cout<<ans<<endl;
			}
			continue;
		}
		for(int i=y;i>=x;i--)
		{
			if(a[i]<0)
			{
				pos=i;
				break;
			}
		}
		for(int i=x;i<pos;i++)
		{
			ans1*=a[i];
			if(ans1>mx)
			{
				flag=1;
				cout<<"Too large"<<endl;
				break;
			}
		}
		if(flag) continue;
		for(int i=x;i<=y;i++)
		{
			if(a[i]<0)
			{
				pos=i;
				break;
			}
		}
		for(int i=y;i>pos;i--)
		{
			ans2*=a[i];
			if(ans2>mx)
			{
				flag=1;
				cout<<"Too large"<<endl;
				break;
			}
		}
		if(flag) continue;
		cout<<max(ans1,ans2)<<endl;
	}
	return 0;
}
2022/10/3 18:10
加载中...