#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
struct info{
ll gan,val,po;
};
ll n;
vector<pair<ll,ll>> ln;
vector<info> segtree;
info merge(info left, info rigth){
info ans;
ans.gan=left.gan*rigth.gan;
ans.val=max(left.val,rigth.val*left.gan);
ans.po=ans.val==left.val?left.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;
segtree[no].po=x;
segtree[no].gan=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... |