Submission #1286534

#TimeUsernameProblemLanguageResultExecution timeMemory
1286534tschav_Horses (IOI15_horses)C++20
0 / 100
60 ms15084 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; 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 gety(int id){ int lim = n; if(id < m-1) { lim = st[id+1]; } ll mx = 0; for(int i = st[id]; i < lim; ++i){ mx = max(mx, y[i]); } return mx; } ll solve() { ll mx = (idx == -1 ? 0 : gety(idx)); ll curr = 1; for(int i = idx+1; i < m; ++i){ curr *= x[st[i]]; int G = gety(i); if(curr * G > mx) { mx = curr * G; } } return (mx%MOD * prod%MOD) % MOD; } void ind() { idx = -1; 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(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.push_back(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(st.begin()+pos,st.begin()+pos+1); } if(val != 1 and old == 1) { st.insert(st.begin()+pos,pos); } int m = st.size(); 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...