#include "horses.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef complex<ld> point;
void debug_out(){cerr << endl;}
template<typename Head, typename... Tail>
void debug_out(Head H, Tail... T){
cout << H << " ";
debug_out(T...);
}
#define debug(...) cerr << "(" << #__VA_ARGS__ << "): ", debug_out(__VA_ARGS__)
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define MP(x, y) make_pair(x, y)
const int maxn = 5e5 + 10;
const int mod = 1e9 + 7;
int n;
ll x[maxn], y[maxn];
ll dp[maxn << 2][2];
bool of[maxn << 2];
int find(int v, int l, int r, int tmp){
if (!of[v] && 1ll * tmp * dp[v][1] < mod) return -1;
if (l + 1 == r) return l;
int mid = (l + r) >> 1;
int lc = v << 1;
int rc = lc | 1;
int res = find(rc, mid, r, tmp);
if (res == -1){
tmp *= dp[rc][1];
res = find(lc, l, mid, tmp);
}
return res;
}
void build2(int v, int l, int r){
if (l + 1 == r){
dp[v][0] = x[l] * y[l];
dp[v][1] = x[l];
return;
}
int mid = (l + r) >> 1;
int lc = v << 1;
int rc = lc | 1;
build2(lc, l, mid);
build2(rc, mid, r);
dp[v][0] = max(dp[lc][0], dp[lc][1] * dp[rc][0]);
dp[v][1] = dp[lc][1] * dp[rc][1];
if (dp[v][1] >= mod || of[lc] || of[rc]) of[v] = true;
dp[v][1] %= mod;
}
void change2(int v, int l, int r, int idx){
if (l + 1 == r){
dp[v][0] = x[l] * y[l];
dp[v][1] = x[l];
return;
}
int mid = (l + r) >> 1;
int lc = v << 1;
int rc = lc | 1;
if (idx < mid) change2(lc, l, mid, idx);
else change2(rc, mid, r, idx);
dp[v][0] = max(dp[lc][0], dp[lc][1] * dp[rc][0]);
dp[v][1] = dp[lc][1] * dp[rc][1];
if (dp[v][1] >= mod || of[lc] || of[rc]) of[v] = true;
dp[v][1] %= mod;
}
pll get2(int v, int l, int r, int ql, int qr){
if (qr <= l || r <= ql) return {1, 1};
if (ql <= l && r <= qr) return MP(dp[v][0], dp[v][1]);
int mid = (l + r) >> 1;
int lc = v << 1;
int rc = lc | 1;
pll a = get2(lc, l, mid, ql, qr);
pll b = get2(rc, mid, r, ql, qr);
return MP(max(a.F, a.S * b.F), a.S * b.S % mod);
}
int Calc(){
int idx = find(1, 0, n, 1);
if (idx == -1) idx = 0;
int tmp = get2(1, 0, n, 0, idx+1).S;
ll tmp2 = max(y[idx], get2(1, 0, n, idx+1, n).F) % mod;
return 1ll * tmp * tmp2 % mod;
}
int init(int N, int X[], int Y[]) {
n = N;
for (int i = 0; i < n; i++){
x[i] = X[i];
y[i] = Y[i];
}
build2(1, 0, n);
return Calc();
}
int updateX(int pos, int val) {
x[pos] = val;
change2(1, 0, n, pos);
return Calc();
}
int updateY(int pos, int val) {
y[pos] = val;
change2(1, 0, n, pos);
return Calc();
}
Compilation message
sorting.cpp:1:10: fatal error: horses.h: No such file or directory
1 | #include "horses.h"
| ^~~~~~~~~~
compilation terminated.