#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second
const int mod = 1e9 + 7;
struct ST1{
vector<int> a;
int n;
void init(int ns){
n = ns;
a.resize(n + 1);
}
void upd(int p, int x){
a[p] = x;
}
int get(int l, int r){
int out = 0;
for (int i = l; i <= r; i++){
out = max(out, a[i]);
}
return out;
}
};
struct ST2{
vector<int> a;
int n;
void init(int ns){
n = ns;
a.resize(n + 1);
}
void upd(int p, int x){
a[p] = x;
}
int get(int l, int r){
if (!r) return 1;
int out = 1;
for (int i = l; i <= r; i++){
out = (1LL * out * a[i]) % mod;
}
return out;
}
};
ST1 T;
ST2 F;
set<int> st;
vector<int> x, y;
int n;
int get(){
if (st.empty()) return T.get(1, n);
auto it = prev(st.end());
ll P = 1;
vector<int> f;
while (true){
P *= x[*it];
f.pb(*it);
if (P > 1e9) break;
if (it == st.begin()){
break;
}
it--;
}
reverse(f.begin(), f.end());
f.pb(n + 1);
ll v1 = x[f[0]] * T.get(f[0], f[1] - 1); P = 1;
ll v2 = 0;
for (int i = 1; i + 1 < f.size(); i++){
int l = f[i], r = f[i + 1] - 1; P *= x[l];
v2 = max(v2, P * T.get(l, r));
}
ll out;
if (v2 <= 1e10){
out = max(v1, v2 * x[f[0]]);
}
else {
out = (v2 % mod) * x[f[0]];
}
out %= mod;
return (1LL * F.get(1, f[0] - 1) * out) % mod;
}
int init(int N, int X[], int Y[]){
n = N;
x.resize(n + 1);
y.resize(n + 1);
T.init(n); F.init(n);
for (int i = 1; i <= n; i++){
x[i] = X[i - 1];
y[i] = Y[i - 1];
if (x[i] > 1){
st.insert(i);
}
T.upd(i, y[i]);
F.upd(i, x[i]);
}
return get();
}
int updateX(int p, int v){
p++;
if (x[p] > 1) st.erase(p);
x[p] = v;
if (v > 1) st.insert(p);
F.upd(p, v);
return get();
}
int updateY(int p, int v){
p++;
y[p] = v;
T.upd(p, v);
return get();
}
# | 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... |