求助,样例不过
查看原帖
求助,样例不过
371927
REAL_曼巴楼主2022/10/3 19:41
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
const int maxn=1073741824;
const ll inf=9223372036854775800;
ll a[10000001];
ll p[10000001];
ll sol(ll l,ll r){
    bool flag=0;
    ll ans=1;
    for(ll i=l;i<=r;i++){
        ans*=a[i];
        if(abs(ans)>maxn){
            flag=1;
            break;
        }
    }
    if(!flag)return ans;
    else return inf;
}
int main(){
    ll n,q;
    scanf("%lld%lld",&n,&q);
    for(int i=1;i<=n;++i)scanf("%lld",&a[i]);
    if(a[1]<0)p[1]=1;
    for(int i=2;i<=n;++i){
        int y=0;
        if(a[i]<0)y++;
        p[i]=p[i-1]+y;
    }
    while(q--){
        int opt;
        ll ans;
        scanf("%d",&opt);
        if(opt==1){
            ll k,x;
            scanf("%lld%lld",&k,&x);
            a[k]=x;
            if(a[1]<0)p[1]=1;
            for(int i=2;i<=n;++i){
                int y=0;
                if(a[i]<0)y++;
                p[i]=p[i-1]+y;
            }
        }
        else {
            ll l,r;
            
            scanf("%lld%lld",&l,&r);
            if(r-l>=62){
                printf("Too large\n");
                continue;
            }
            ll f=p[r]-p[l-1];
            if(f%2==0){
                if(sol(l,r)==inf){
                    printf("Too large\n");
                }
                else
                    printf("%lld\n",ans);
            }
            else{
                ll p1,p2;
                for(int i=l;i<=r;i++)
                    if(a[i]<0){
                        p1=i;
                        break;
                    }
                for(int i=r;i>=l;i--)
                    if(a[i]<0){
                        p2=i;
                        break;
                    }
                ll op=sol(l,p2);
                if(op==inf){
                    printf("Too large\n");
                }
                else {
                    ll opt=sol(p1+1,r);
                    if(opt==inf){
                        printf("Too large\n");
                    }
                    else {
                        printf("%lld\n",max(op,opt));
                    }
                }
            }
        }
    }
    return 0;
}
2022/10/3 19:41
加载中...