25分求调
查看原帖
25分求调
574644
lishunji楼主2023/9/26 14:01

代码如下,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;
}
2023/9/26 14:01
加载中...