25pts,朴素暴力求调
查看原帖
25pts,朴素暴力求调
749175
114514xxx楼主2022/10/4 12:11
#include<bits/stdc++.h>
using namespace std;
int n,q;
int a[1014514]; 
int mo;
long long k,p,l,r;
__int128 s=1,d=1;
bool flag;
int large=pow(2,30);int cnt;
inline void print(__int128 x);
inline void c1();
inline void c2();
inline void print(__int128 x){
    if(x<0)putchar('-'),x=-x;
    if(x>9)print(x/10);
    putchar(x%10+'0');
}
/*void f(){
	for(int i=l;i<=r;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
}*/
inline void c1(){
	for(int i=l;i<=r;i++){
				if(a[i]>0){
				s*=a[i];
				if(s>d){
					d=s;
				}
				}
				if(a[i]<0){
					s=1;
					continue;	
				}	
			if(d>large){
			cout<<"Too large"<<endl;
		    }
	}
	print(d);
	cout<<endl;
	return;
}算奇数个负数
inline void c2(){
	if(r-l>30){cout<<"Too large"<<endl;return;} 
	for(int i=l;i<=r;i++){
		s*=a[i];
	}
	if(s<=large){
	print(s);
	cout<<endl;
	}else{
		cout<<"Too large"<<endl;
	}
}//算偶数个负数
int main(){
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=q;i++){
		cin>>mo;
		if(mo==1){
			cin>>p>>k;
			a[p]=k;
		}
		if(mo==2){
		    s=1;
		    d=1;
			bool er=true;
			cin>>l>>r;
		for(int i=l;i<=r;i++)if(a[i]<0)cnt++;
		if(cnt%2==1)er=false;
		if(er)c2();
		else c1();
		cnt=0;
		}
	}
	return 0;
}

2022/10/4 12:11
加载中...