#include "horses.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pi pair<int, int>
#define pl pair<ll, ll>
#define vi vector<int>
#define vl vector<ll>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(),(x).end()
const int mod=1e9+7;
ll pw(ll a, ll pww) {
if (pww==0) {
return 1;
}
ll temp=pw(a,pww>>1);
temp=(temp*temp)%mod;
if (pww&1) {
temp=(temp*a)%mod;
}
return temp;
}
ll inv(ll a) {
return pw(a,mod-2);
}
struct node {
long double val=0;
ll ret=1;
long double lzyval=0;
ll lzyret=1;
};
const int maxn=5e5+10;
int n;
vector<node> nodes(maxn*4);
vi x(maxn);
vi y(maxn);
node merge(node a, node b) {
if (a.val>=b.val) {
return a;
}
return b;
}
void push(int v, int tl, int tr) {
nodes[v].val+=nodes[v].lzyval;
nodes[v].ret=(nodes[v].ret*nodes[v].lzyret)%mod;
if (tl!=tr) {
nodes[2*v].lzyval+=nodes[v].lzyval;
nodes[2*v].lzyret=(nodes[2*v].lzyret*nodes[v].lzyret)%mod;
nodes[2*v+1].lzyval+=nodes[v].lzyval;
nodes[2*v+1].lzyret=(nodes[2*v+1].lzyret*nodes[v].lzyret)%mod;
}
nodes[v].lzyval=0;
nodes[v].lzyret=1;
}
void update(int l, int r, long double val, ll ret, int v=1, int tl=0, int tr=n-1) {
push(v,tl,tr);
if (l<=tl && tr<=r) {
nodes[v].lzyval+=val;
nodes[v].lzyret=(nodes[v].lzyret*ret)%mod;
push(v,tl,tr);
return;
}
if (tr<l || r<tl) {
return;
}
int tm=tl+(tr-tl)/2;
update(l,r,val,ret,2*v,tl,tm);
update(l,r,val,ret,2*v+1,tm+1,tr);
nodes[v]=merge(nodes[2*v],nodes[2*v+1]);
}
int init(int _n, int X[], int Y[]) {
n=_n;
for (int i=0; i<n; i++) {
x[i]=X[i];
update(i,n-1,log(x[i]),x[i]);
y[i]=Y[i];
update(i,i,log(y[i]),y[i]);
}
return nodes[1].ret;
}
int updateX(int pos, int val) {
update(pos,n-1,log(val)-log(x[pos]),1ll*val*inv(x[pos])%mod);
return nodes[1].ret;
}
int updateY(int pos, int val) {
update(pos,pos,log(val)-log(y[pos]),1ll*val*inv(y[pos])%mod);
return nodes[1].ret;
}
# | 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... |