#include <bits/stdc++.h>
#include "horses.h"
using namespace std;
#define ll long long
#define mkp make_pair
#define pb push_back
#define f first
#define s second
ll mod=1e9+7;
struct info{
ll gan,val,po;
double lgan,lval;
};
ll n;
vector<pair<ll,ll>> ln;
vector<info> segtree;
info merge(info left, info rigth){
info ans;
ans.gan=(left.gan*rigth.gan)%mod;
ans.lgan=left.lgan+rigth.lgan;
double nlogc=left.lgan+rigth.lval;
ll ngamc=(left.gan*rigth.val)%mod;
if(left.lval>=nlogc){
ans.val=left.val;
ans.lval=left.lval;
ans.po=left.po;
}else{
ans.val=ngamc;
ans.lval=nlogc;
ans.po=rigth.po;
}
return ans;
}
void uptade(ll no, ll l, ll r, ll x, ll v, ll in){
if(l==r){
segtree[no].val=(v*in)%mod;
segtree[no].lval=log((double)in*(double)v);
segtree[no].po=x;
segtree[no].gan=in;
segtree[no].lgan=log((double)in);
return;
}
ll m=l+((r-l)/2);
if(x<=m) uptade(no*2, l, m, x, v, in);
else uptade(no*2+1, m+1, r, x, v, in);
segtree[no]=merge(segtree[no*2],segtree[no*2+1]);
return;
}
int init(int N, int X[], int Y[]) {
n=N;
ln.reserve(N+1);
segtree.resize(N*4+10);
for(int i=0;i<n;i++){
ln.pb(mkp(X[i],Y[i]));
uptade(1,0,N-1,i,Y[i],X[i]);
}
return segtree[1].val;
}
int updateX(int pos, int val) {
ln[pos].f=val;
uptade(1,0,n-1,pos,ln[pos].s,val);
return segtree[1].val;
}
int updateY(int pos, int val) {
ln[pos].s=val;
uptade(1,0,n-1,pos,val,ln[pos].f);
return segtree[1].val;
}
# | 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... |