#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |