#include "horses.h"
#include <vector>
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define V vector
using namespace std;
typedef long long ll;
#define all(v) v.begin(), v.end()
#define P pair
#define F first
#define S second
const ll MOD=(ll)1e9+7;
void file() {
freopen("input.txt.txt", "r", stdin);
freopen("output.txt.txt", "w", stdout);
}
struct segtree {
private:
struct node {
long double ans;
long double sum;
int id;
};
node single(P<P<long double,long double>,int>p) {
return {p.F.F+p.F.S,p.F.F,p.S};
}
node neutral={0LL,0LL,-1};
node merge(node a,node b) {
if (a.id==-1)return b;
if (b.id==-1)return a;
node c;
c.sum=a.sum+b.sum;
if (a.ans>a.sum+b.ans) {
c.ans=a.ans;
c.id=a.id;
}
else {
c.ans=b.ans+a.sum;
c.id=b.id;
}
return c;
}
public:
int size;
V<node>query;
void init(int n) {
size=1;
while (size<n)size*=2;
query.assign(2*size,neutral);
}
void build(V<P<long double,long double>>&a,int x,int lx,int rx) {
if (rx-lx==1) {
if (lx<a.size()) {
query[x]=single({a[lx],lx});
}
return;
}
int m=(lx+rx)/2;
build(a,2*x+1,lx,m);
build(a,2*x+2,m,rx);
query[x]=merge(query[2*x+1],query[2*x+2]);
}
void build(V<P<long double,long double>>&a) {
build(a,0,0,size);
}
void set(int i,P<long double,long double>v,int x,int lx,int rx) {
if (rx-lx==1) {
query[x]=single({v,lx});
return;
}
int m=(lx+rx)/2;
if (i<m)
set(i,v,2*x+1,lx,m);
else
set(i,v,2*x+2,m,rx);
query[x]=merge(query[2*x+1],query[2*x+2]);
}
void set(int i,P<double,double>v) {
set(i,v,0,0,size);
}
};
int n;
segtree tree;
struct seggy {
private:
struct node {
ll p;
};
node single(int v) {
return {v};
}
node neutral={1LL};
node merge(node a,node b) {
return {(a.p%MOD*b.p%MOD)%MOD};
}
public:
int size;
V<node>query;
void init(int n) {
size=1;
while (size<n)size*=2;
query.assign(2*size,neutral);
}
void build(V<ll>&a,int x,int lx,int rx) {
if (rx-lx==1) {
if (lx<a.size()) {
query[x]=single(a[lx]);
}
return;
}
int m=(lx+rx)/2;
build(a,2*x+1,lx,m);
build(a,2*x+2,m,rx);
query[x]=merge(query[2*x+1],query[2*x+2]);
}
void build(V<ll>&a) {
build(a,0,0,size);
}
void set(int i,ll v,int x,int lx,int rx) {
if (rx-lx==1) {
query[x]=single(v);
return;
}
int m=(lx+rx)/2;
if (i<m)
set(i,v,2*x+1,lx,m);
else
set(i,v,2*x+2,m,rx);
query[x]=merge(query[2*x+1],query[2*x+2]);
}
void set(int i,ll v) {
set(i,v,0,0,size);
}
node calc(int l,int r,int x,int lx,int rx) {
if (lx>=r || rx<=l)return neutral;
if (l<=lx && rx<=r) return query[x];
int m=(lx+rx)/2;
node a=calc(l,r,2*x+1,lx,m);
node b=calc(l,r,2*x+2,m,rx);
return merge(a,b);
}
ll calc(int l,int r) {
return calc(l,r,0,0,size).p;
}
};
seggy tree1;
long double A[(int)5e5+1],B[(int)5e5+1];
int a[(int)5e5+1],b[(int)5e5+1];
int f(int id) {
ll y= tree1.calc(0,id+1);
y%=MOD;
y*=b[id]%MOD;
y%=MOD;
return (int)y;
}
int init(int N, int X[], int Y[]) {
n=N;
for (int i=0;i<n;i++) {
a[i]=X[i];
b[i]=Y[i];
}
for (int i=0;i<n;i++) {
A[i]=log(X[i]);
B[i]=log(Y[i]);
}
tree.init(n);
V<P<long double,long double>>vp;
V<ll>vp1;
for (int i=0;i<n;i++) {
vp.pb({A[i],B[i]});
vp1.pb(a[i]);
}
tree.build(vp);
tree1.init(n);
tree1.build(vp1);
return f(tree.query[0].id);
}
int updateX(int pos, int val) {
a[pos]=val;
A[pos]=log(a[pos]);
tree.set(pos,{A[pos],B[pos]});
tree1.set(pos,a[pos]);
return f(tree.query[0].id);
}
int updateY(int pos, int val) {
b[pos]=val;
B[pos]=log(b[pos]);
tree.set(pos,{A[pos],B[pos]});
return f(tree.query[0].id);
}
Compilation message (stderr)
horses.cpp: In function 'void file()':
horses.cpp:15:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
15 | freopen("input.txt.txt", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
horses.cpp:16:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
16 | freopen("output.txt.txt", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 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... |