Submission #1302278

#TimeUsernameProblemLanguageResultExecution timeMemory
1302278nicolo_010Horses (IOI15_horses)C++20
17 / 100
1597 ms16004 KiB
#include <bits/stdc++.h> #include "horses.h" using namespace std; using ll = long long; using pii = pair<int, int>; const int MOD = 1e9+7; const ll INF = 1e18; vector<ll> x; vector<ll> y; int n; ll compute(vector<ll> a, vector<ll> b) { int idx=0; ll prod=1; bool moduled = false; for (int i=1; i<(int)a.size(); i++) { ll y0 = b[idx]; ll y1 = b[i]; prod *= x[i]; if (prod >= MOD) { moduled = true; prod %= MOD; } if (moduled) { //Se que y[i] <= y[j]*prod //Conviene j idx = i; moduled = 0; prod = 1; } else { if (prod*y1 >= y0) { idx = i; prod = 1; moduled = false; } } } prod=a[0]; for (int i=1; i<n; i++) { if (i > idx) break; prod *= a[i]; prod %= MOD; } return (prod*b[idx]) % MOD; } int init(int N, int* a, int* b) { n = N; x.assign(n, 0); y.assign(n, 0); for (int i=0; i<n; i++) { x[i] = a[i]; y[i] = b[i]; } x.push_back(1); y.push_back(0); ll ans=x[0]*y[0]; ll prod=x[0]; for (int i=0; i<n; i++) { prod *= x[i+1]; prod %= MOD; if (y[i+1] > y[i]/x[i+1]) { ans = prod*y[i+1]; } } return ans%MOD; } int updateX(int pos, int val) { x[pos] = val; ll ans=x[0]*y[0]; ll prod=x[0]; for (int i=0; i<n; i++) { prod *= x[i+1]; prod %= MOD; if (y[i+1] > y[i]/x[i+1]) { ans = prod*y[i+1]; } } return ans%MOD; } int updateY(int pos, int val) { y[pos] = val; ll ans=x[0]*y[0]; ll prod=x[0]; for (int i=0; i<n; i++) { prod *= x[i+1]; prod %= MOD; if (y[i+1] > y[i]/x[i+1]) { ans = prod*y[i+1]; } } return ans%MOD; }
#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...