30pts求调(代码极简单)(悬赏一关注)
  • 板块P8563 Magenta Potion
  • 楼主a16_
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/10/9 12:35
  • 上次更新2023/10/27 08:06:49
查看原帖
30pts求调(代码极简单)(悬赏一关注)
416388
a16_楼主2022/10/9 12:35

RT

#include<iostream>
using namespace std;
int n,q,a[500010];
#define ll long long
ll mul(int l,int r){
	ll res=1;
	for(int i=l;i<=r;i++) res=res*a[i];
	return res;
}
void print(ll x){
	if(x>(1<<30)) cout<<"Too large\n";
	else cout<<x<<'\n';
}
int main(){
	cin>>n>>q;
	for(int i=1;i<=n;i++) cin>>a[i];
	int opt,l,r;
	while(q--){
		cin>>opt>>l>>r;
		if(opt==1){ a[l]=r; }
		if(opt==2){
			if(r-l>=63){
				cout<<"Too large\n";
				continue;
			}
			int lp,rp,cnt=0;
			ll ans=0;
			for(int i=l;i<=r;i++) if(a[i]<0) cnt++;
			for(int i=l;i<=r;i++) if(a[i]<0){lp=i;break;}
			for(int i=r;i>=l;i--) if(a[i]<0){rp=i;break;}
			if(cnt%2==0){
				ans=mul(l,r);
				print(ans);
			}else{
				ans=max(ans,mul(l,lp-1));
				ans=max(ans,mul(lp+1,r));
				ans=max(ans,mul(l,rp-1));
				ans=max(ans,mul(rp+1,r));
				print(ans);	
			}
		}
	}
	return 0;
}
2022/10/9 12:35
加载中...