제출 #1273801

#제출 시각아이디문제언어결과실행 시간메모리
1273801Petrix말 (IOI15_horses)C++20
0 / 100
31 ms12288 KiB
#include "horses.h"
#include<iostream>
using namespace std;

#pragma GCC optimize("O3,inline")
#define MOD 1000000007

int n;
long long x[600001];
long long aint[2400001];
long long y[600001];

void init(int nod,int st,int dr){
    if(st==dr){
        aint[nod]=x[st];
        return;
    }
    int mij=(st+dr)/2;
    aint[nod]=aint[2*nod]*aint[2*nod+1]%MOD;
}

void update(int nod,int st,int dr,int a){
    if(st==dr){
        aint[nod]=x[st];
        return;
    }
    int mij=(st+dr)/2;
    if(a<=mij) update(2*nod,st,mij,a);
    else update(2*nod+1,mij+1,dr,a);
    aint[nod]=aint[2*nod]*aint[2*nod+1]%MOD;
}

long long query(int nod,int st,int dr,int a,int b){
    if(b<st || dr<a) return 1;
    if(a<=st && dr<=b) return aint[nod];
    int mij=(st+dr)/2;
    return query(2*nod,st,mij,a,b)*query(2*nod+1,mij+1,dr,a,b)%MOD;
}

int calc(){
    long long ci,prod,i,rasp=1,max1;
    ci=n;prod=y[n]*x[n];
    for(i=n-1;i>=1;i--){
        if(prod>1e9) break;
        if(y[i]>prod){
            ci=i;prod=y[i];
        }
        prod*=x[i];
    }
    rasp=query(1,1,n,1,ci);
    rasp=(rasp*y[ci])%MOD;
	return rasp;
}

int init(int N,int X[],int Y[]){
    int i;
    n=N;
    for(i=1;i<=n;i++){
        x[i]=X[i-1];
        y[i]=Y[i-1];
    }
    init(1,1,n);
    return calc();
}

int updateX(int pos,int val){
    x[pos+1]=val;
    update(1,1,n,pos+1);
	return calc();
}

int updateY(int pos,int val){
    y[pos+1]=val;
	return calc();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...