#include "horses.h"
#include <stdio.h>
int n, t[1111111], r1[1111111], y[555555], r2[1111111];
int mul1(int i,int j){ return(i*1ll*j<1000000000)?i*j:1000000000; }
int mul2(int i,int j){ return i*1ll*j%1000000007; }
void pulr(int i){ r1[i]=mul1(r1[i*2],r1[i*2+1]); r2[i]=mul2(r2[i*2],r2[i*2+1]);}
int queryr(int l,int r){
int z=1;
for(l+=n,r+=n;l<r;l/=2,r/=2){
if(l&1)z=mul1(z,r1[l++]);
if(r&1)z=mul1(r1[--r],z);
}
return z;
}
int queryr2(int l,int r){
int z=1;
for(l+=n,r+=n;l<r;l/=2,r/=2){
if(l&1)z=mul2(z,r2[l++]);
if(r&1)z=mul2(r2[--r],z);
}
return z;
}
void pult(int i){
int a=t[i*2],b=t[i*2+1];
t[i]=(queryr(a+1,b+1)*1ll*y[b]>=y[a])?b:a;
}
int init(int N, int X[], int Y[]) {
n=N;
for(int i=0;i<n;++i) t[i+n]=i, r1[i+n]=r2[i+n]=X[i], y[i]=Y[i];
for(int i=n;--i;)pulr(i);
for(int i=n;--i;)pult(i);
return queryr2(0,1+t[1])*1ll*y[t[1]]%1000000007;
}
int updateX(int pos, int val) {
r1[pos+n]=r2[pos+n]=val;
for(int j=pos+n;j/=2;)pulr(j);
return queryr2(0,1+t[1])*1ll*y[t[1]]%1000000007;
}
int updateY(int pos, int val) {
y[pos]=val;
for(int j=pos+n;j/=2;)pult(j);
return queryr2(0,1+t[1])*1ll*y[t[1]]%1000000007;
}
# | 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... |