제출 #1286552

#제출 시각아이디문제언어결과실행 시간메모리
1286552tschav_말 (IOI15_horses)C++20
0 / 100
1594 ms35644 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; vector<ll> x, y; int n; int m; ll prod = 1; int idx = -1; set<int> st; static const ll MOD = 1e9+7; ll binpow(ll a, ll b, ll m) { a %= m; ll res = 1; while (b > 0) { if (b & 1) res = res * a % m; a = a * a % m; b >>= 1; } return res; } ll gety(int id) { int m = st.size(); if (id < 0 || id >= m) return 0; auto it = next(st.begin(), id); int init = *it; int lim = n; if (id < m - 1) { auto it2 = next(it); lim = *it2; } ll mx = 0ll; for (int i = init; i < lim; ++i) { mx = max(mx, y[i]); } return mx; } ll solve() { ll mx = 0ll; if (idx != -1) mx = gety(idx); ll curr = 1; auto it = (idx + 1 < m) ? next(st.begin(), idx + 1) : st.end(); for (int i = idx + 1; it != st.end(); ++i, ++it) { curr *= x[*it]; ll G = gety(i); ll val = curr * G; if (val > mx) mx = val; } ll ans = mx % MOD; return (ans * (prod % MOD)) % MOD; } void ind() { idx = -1; ll P = 1ll; int i = m - 1; for (auto it = st.rbegin(); it != st.rend(); ++it, --i) { int pos = *it; if (P > 1e9 / x[pos]) { idx = i; break; } else { P *= x[pos]; } } } void getprod() { prod = 1ll; if (idx < 0) return; auto it = st.begin(); for (int i = 0; i <= idx and it != st.end(); ++i, ++it) { prod = (prod * (x[*it] % MOD)) % MOD; } } int init(int N, int X[], int Y[]) { n = N; x.resize(n,0ll); y.resize(n,0ll); for(int i = 0; i < n; ++i) { x[i] = X[i]; y[i] = Y[i]; if(x[i] >= 2){ st.insert(i); } } m = st.size(); ind(); getprod(); return int(solve()); } int updateX(int pos, int val) { ll old = x[pos]; x[pos] = val; if(val == 1 and old != 1) { st.erase(pos); } if(val != 1 and old == 1) { st.insert(pos); } m = st.size(); ind(); //int I = *(next(st.begin(),idx)); // if(pos <= I) { // prod = (prod * binpow(old, MOD-2,MOD)) % MOD; // prod = (prod * val) % MOD; // } getprod(); return int(solve()); } int updateY(int pos, int val) { y[pos] = val; ind(); return int(solve()); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...