估计也就我会犯这种错误了
查看原帖
估计也就我会犯这种错误了
696078
_Yonder_楼主2024/8/3 00:18

求 fir,secfir,sec 记得 break

#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline int read(){bool f=0;int x=0;char c=getchar();while(!isdigit(c)) f|=c=='-',c=getchar();while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();return f?~x-1:x;}
inline void write(ll x){if(x<0) putchar('-'),x=-x;static int sta[35];int top=0;do{sta[top++]=x%10,x/=10;}while(x);while(top) putchar(sta[--top]+'0');}
const int N=2e5+5;
int n,q,a[N],op,x,y;
inline int F(int l,int r){
	if(l>r) return 1;
	ll ans=1;
	for(int i=l;i<=r;i++){
		ans*=a[i];
		if(ans<-(1<<30)) ans=-(1<<30);
		if(ans>(1<<30)) return -1;
	}return ans;
}
int main(){
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	while(q--){
		scanf("%d%d%d",&op,&x,&y);
		if(op&1) a[x]=y;
		else{
			if(y-x>60) printf("Too large\n");
			else{
				int f=0;
				for(int i=x;i<=y;i++) f+=a[i]<0;
				if(f&1){
					int fir,sec;
					for(int i=x;i<=y;i++) if(a[i]<0){fir=i;break;}
					for(int i=y;i>=x;i--) if(a[i]<0){sec=i;break;}
					int L=F(x,sec-1),R=F(fir+1,y);
					if(L==-1||R==-1) printf("Too large\n");
					else printf("%d\n",max(L,R));
				}else{
					int ans=F(x,y);
					if(ans==-1) printf("Too large\n");
					else printf("%d\n",ans);
				}
			}
		}
	}
	return 0;
}
2024/8/3 00:18
加载中...