#include "horses.h"
#include <stdio.h>
#include <math.h>
const int M=1000000007;
int n, y[555555], x[555555];
typedef struct A{ double sm,mx; int ans,mul; } A;
A t[1111111];
void pul(int i){
t[i].mul=t[i*2].mul*1ll*t[i*2+1].mul%M;
t[i].sm=t[i*2].sm+t[i*2+1].sm;
if(t[i*2].mx>=t[i*2].sm+t[i*2+1].mx){
t[i].mx=t[i*2].mx;
t[i].ans=t[i*2].ans;
}else{
t[i].mx=t[i*2].sm+t[i*2+1].mx;
t[i].ans=t[i*2].mul*1ll*t[i*2+1].ans%M;
}
}
void o(int i){
t[i+n]=(A){ log(x[i]),log(x[i])+log(y[i]), x[i]*1ll*y[i]%M,x[i] };
}
void u(int i){
for(int p=i+n;p/=2;)pul(p);
}
int init(int N, int X[], int Y[]) {
n=N;
while((n&(n-1)))++n;
for(int i=0;i<n;++i)
x[i]=X[i],y[i]=Y[i], o(i);
for(int i=n;--i;)pul(i);
return t[1].ans;
}
int updateX(int i, int val) {
x[i]=val;
o(i);u(i);
return t[1].ans;
}
int updateY(int pos, int val) {
y[pos]=val;
o(pos);u(pos);
return t[1].ans;
}
# | 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... |