#include "horses.h"
#include<bits/stdc++.h>
int mod = 1e9+7;
using namespace std;
using ll = long long;
vector<ll>x,y,seg;
__int128 n,loc=1,s=1;
void update(int l,int r,int u,int ind,int val){
if(l==r){
seg[u]=val;
return;
}
int mid = (l+r)/2;
if(ind<=mid) update(l,mid,u*2+1,ind,val);
else update(mid+1,r,u*2+2,ind,val);
seg[u]=(seg[u*2+1]*seg[u*2+2])%mod;
}
ll get(int l,int r,int u,int lx,int rx){
if(l>=lx && r<=rx){
return seg[u];
}
if(l>rx||r<lx){
return 1;
}
int mid = (l+r)/2;
return (get(l,mid,u*2+1,lx,rx)*get(mid+1,r,u*2+2,lx,rx))%mod;
}
int init(int N, int X[], int Y[]) {
n = N;
while(s<n)s*=2;
seg =vector<ll>(2*s,1);
for(int i = 0;i<N;i++) x.push_back(X[i]),update(0,s-1,0,i,X[i]);
for(int i = 0;i<N;i++) y.push_back(Y[i]);
if(n<=1000){
ll ans = 1,cnt=1,ind = 0;
for(int i = 0;i<n;i++){
cnt*=X[i];
if(cnt*Y[i]>=Y[ind]) ind = i,cnt=1;
}
for(int i = 0;i<=ind;i++) ans=(ans*X[i])%mod;
ans*=Y[ind];
return ans%mod;
}
else{
ll ans = get(0,s-1,0,0,n-41),cnt=1,ind = n-40;
for(int i = n-40;i<n;i++){
cnt*=x[i];
if(cnt*y[i]>=y[ind]) ind = i,cnt=1;
}
for(int i = n-40;i<=ind;i++) ans=(ans*x[i])%mod;
ans*=y[ind];
return ans%mod;
}
}
int updateX(int pos, int val) {
x[pos]=val;
update(0,s-1,0,pos,val);
if(n<=1000){
ll ans = 1,cnt=1,ind = 0;
for(int i = 0;i<n;i++){
cnt*=x[i];
if(cnt*y[i]>=y[ind]) ind = i,cnt=1;
}
for(int i = 0;i<=ind;i++) ans=(ans*x[i])%mod;
ans*=y[ind];
return ans%mod;
}
else{
ll ans = get(0,s-1,0,0,n-41),cnt=1,ind = n-40;
for(int i = n-40;i<n;i++){
cnt*=x[i];
if(cnt*y[i]>=y[ind]) ind = i,cnt=1;
}
for(int i = n-40;i<=ind;i++) ans=(ans*x[i])%mod;
ans*=y[ind];
return ans%mod;
}
}
int updateY(int pos, int val) {
y[pos]=val;
if(n<=1000){
ll ans = 1,cnt=1,ind = 0;
for(int i = 0;i<n;i++){
cnt*=x[i];
if(cnt*y[i]>=y[ind]) ind = i,cnt=1;
}
for(int i = 0;i<=ind;i++) ans=(ans*x[i])%mod;
ans*=y[ind];
return ans%mod;
}
else{
ll ans = get(0,s-1,0,0,n-41),cnt=1,ind = n-40;
for(int i = n-40;i<n;i++){
cnt*=x[i];
if(cnt*y[i]>=y[ind]) ind = i,cnt=1;
}
for(int i = n-40;i<=ind;i++) ans=(ans*x[i])%mod;
ans*=y[ind];
return ans%mod;
}
}
# | 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... |