Submission #1286500

#TimeUsernameProblemLanguageResultExecution timeMemory
1286500tschav_Horses (IOI15_horses)C++20
0 / 100
7 ms4156 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 = 0; vector<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 solve() { ll mx = y[st[idx]]; ll curr = 1; for(int i = idx+1; i < m; ++i){ curr *= x[st[i]]; if(curr * y[st[i]] > mx) { mx = curr * y[st[i]]; } } return (mx%MOD * prod%MOD) % MOD; } void ind() { idx = 0; ll P = 1ll; for(int i = m-1; i >= 0; --i) { if(P * x[st[i]] > 1e9) { idx=i; break; } else P *= x[st[i]]; } } void getprod() { prod = 1ll; for(int i = 0; i <= idx; ++i){ prod = (prod * x[st[i]]) % MOD; } } int init(int N, int X[], int Y[]) { n = N; x.resize(sizeof(x),0ll); y.resize(sizeof(y),0ll); for(int i = 0; i < n; ++i) { x[i] = X[i]; y[i] = Y[i]; if(x[i] >= 2) { st.push_back(i); } } m = st.size(); ind(); getprod(); return int(solve()); } int updateX(int pos, int val) { ll old = x[pos]; x[pos] = val; ind(); if(pos <= idx) { prod = (prod * binpow(old, MOD-2,MOD)) % MOD; prod = (prod * val) % MOD; } 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...