Submission #739116

#TimeUsernameProblemLanguageResultExecution timeMemory
739116fractlpacaHorses (IOI15_horses)C++17
17 / 100
1547 ms13320 KiB
#include "horses.h" #include <vector> #include <algorithm> #define v vector #define ll long long #define MOD ((ll) 1000000007) using namespace std; v<ll> xs; v<ll> ys; int n; // Subtask 1 // int solve() { // int ma = 0; // int pop = 1; // for(int i=0; i<n; i++) { // pop*=xs[i]; // ma = max(ma, pop*ys[i]); // } // return ma%MOD; // } // int init(int N, int X[], int Y[]) { // n = N; // for (int i=0; i<n; i++) { // xs.push_back(X[i]); // ys.push_back(Y[i]); // } // return solve(); // } // int updateX(int pos, int val) { // xs[pos] = val; // return solve(); // } // int updateY(int pos, int val) { // ys[pos] = val; // return solve(); // } //Subtask 2 // int solve() { // int max_i = n-1; // ll pop = xs[n-1]; // for(int i=n-2; i>=0; i--) { // if (ys[i] > ys[max_i]*pop) { // max_i = i; // pop=1; // } // pop = min(pop*xs[i], (ll)MOD); // } // pop=1; // for(int i=0; i<=max_i; i++){ // pop = (pop*xs[i])%MOD; // } // return (int) ((pop*ys[max_i])%MOD); // } // int init(int N, int X[], int Y[]) { // n = N; // for (int i=0; i<n; i++) { // xs.push_back(X[i]); // ys.push_back(Y[i]); // } // return solve(); // } // int updateX(int pos, int val) { // xs[pos] = val; // return solve(); // } // int updateY(int pos, int val) { // ys[pos] = val; // return solve(); // } // Subtask 3 int solve() { int max_i = n-1; ll pop = xs[n-1]; for(int i=n-2; i>=0 && i>=n-30; i--) { if (ys[i] > ys[max_i]*pop) { max_i = i; pop=1; } pop = min(pop*xs[i], (ll)MOD); } pop=1; for(int i=0; i<=max_i; i++){ pop = (pop*xs[i])%MOD; } return (int) ((pop*ys[max_i])%MOD); } int init(int N, int X[], int Y[]) { n = N; for (int i=0; i<n; i++) { xs.push_back(X[i]); ys.push_back(Y[i]); } return solve(); } int updateX(int pos, int val) { xs[pos] = val; return solve(); } int updateY(int pos, int val) { ys[pos] = val; return solve(); } // Subtask 5 // ll query_xs(int L, int R, int l, int r, int index) { // if (r<L || l>R) return 1; // if (l>=L and r<=R) return xs[index]; // int mid = (l+r)/2; // ll subl = query_xs(L, R, l, mid, index*2); // ll subr = query_xs(L, R, mid+1, r, index*2+1); // return min(MOD, subl*subr); // } // void update_xs(int pos, int value, int l, int r, int index) { // int mid = (l+r)/2; // if (l==r) xs[index] = value; // if (pos <= mid){ // update_xs(pos, value, l, mid, index*2); // } else { // update_xs(pos, value, mid+1, r, index*2+1); // } // xs[index] = min(MOD, xs[index*2]*xs[index*2+1]); // } // ll query_ys(int L, int R, int l, int r, int index) { // if (r<L || l>R) return 0; // if (l>=L and r<=R) return ys[index]; // int mid = (l+r)/2; // ll subl = query_ys(L, R, l, mid, index*2); // ll subr = query_ys(L, R, mid+1, r, index*2+1); // return max(subl, subr); // } // void update_ys(int pos, int value, int l, int r, int index) { // int mid = (l+r)/2; // if (l==r) ys[index] = value; // if (pos <= mid){ // update_ys(pos, value, l, mid, index*2); // } else { // update_ys(pos, value, mid+1, r, index*2+1); // } // ys[index] = max(ys[index*2], ys[index*2+1]); // } // int solve() { // int max_i = n-1; // ll pop = xs[n-1]; // for(int i=n-2; i>=0; i--) { // if (ys[i] > ys[max_i]*pop) { // max_i = i; // pop=1; // } // pop = min(pop*xs[i], (ll)MOD); // } // pop=1; // for(int i=0; i<=max_i; i++){ // pop = (pop*xs[i])%MOD; // } // return (int) ((pop*ys[max_i])%MOD); // } // int init(int N, int X[], int Y[]) { // n = N; // xs = v<ll> (2*n, 1); // ys = v<ll> (2*n, 0); // for (int i=0; i<n; i++) { // update_xs(i, X[i], 0, n-1, 1); // update_ys(i, Y[i], 0, n-1, 1); // } // return solve(); // } // int updateX(int pos, int val) { // update_xs(pos, val, 0, n-1, 1); // return solve(); // } // int updateY(int pos, int val) { // update_ys(pos, val, 0, n-1, 1); // return 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...