代码求调,思路没错但代码错了
查看原帖
代码求调,思路没错但代码错了
657687
feiyangyang楼主2022/10/4 11:51
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#define ll long long
using namespace std;
int n,t,a[100000],ans,o,anss;
struct node{
	int l;
	int r;
	int sum;
}tree[900005];
inline void build(int i,int l,int r)
{
	tree[i].l=l,tree[i].r=r;
	if(l==r)
	{
		tree[i].sum=a[l];
		return;
	}
	int mid=(l+r)>>1;
	build(i<<1,l,mid);
	build(i<<1|1,mid+1,r);
}
inline void add(int i,int dis,int k)
{
	if(tree[i].l==tree[i].r)
	{
		tree[i].sum=k;
		return ;
	}
	if(dis<=tree[i*2].r)
	{
		add(i*2,dis,k);
	}
	else
	{
		add(i*2+1,dis,k);
	}
	tree[i].sum=tree[i*2].sum+tree[i*2+1].sum;
	return ;
}
int main()
{
	scanf("%d%d",&n,&t);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	build(1,1,n);
	int k,l,r;
	for(int i=1;i<=t;i++)
	{
		scanf("%d%d%d",&k,&l,&r);
		if(k==1)
		{
//			add(1,l,r);
			a[l]=r;
		}
		else
		{
			if(r-l>60)
			{
				printf("Too large\n");
				continue;
			}
			anss=1;
			for(int i=1;i<=n;i++)
			{
				if(a[i]<0)
				{
					o++;
				}
				anss*=a[i];
			}
			if(o%2==0)
			{
				if(anss<=1073741824)
					printf("%d\n",anss);
				else
					printf("Too large\n");				
			}
			else
			{
				o=anss;
				for(int i=1;i<=n;i++)
				{
					if(a[i]>0)
					{
						anss*=a[i];
					}
					else
					{
						continue;
					}
				}
				for(int i=n;i>=1;i--)
				{
					if(a[i]>0)
					{
						ans*=a[i];
					}
					else
					{
						continue;
					}
				}
				ans=o/ans;
				anss=o/anss;
				if(ans>anss&&ans<=1073741824&&ans>0)
				{
					printf("%d\n",ans);
					continue;
				}
				if(ans<anss&&anss<=1073741824&&anss>0)
				{
					printf("%d\n",anss);
					continue;
				}
				printf("Too large\n");
			}
		}
	}
	return 0;
}
```CPP
2022/10/4 11:51
加载中...