Submission #800823

#TimeUsernameProblemLanguageResultExecution timeMemory
800823LiudasHorses (IOI15_horses)C++17
100 / 100
273 ms62316 KiB
#include <bits/stdc++.h> #include "horses.h" using namespace std; class segtree{ public: struct nodes{ double clogx, clogy; double logx; long long X; long long cX, cY; }; vector<long long> X, Y; vector<nodes> tree; long long N; long long MOD = 1e9 + 7; nodes comp(nodes a, nodes b){ nodes c = a; c.logx += b.logx; c.X = 1ll * c.X * b.X % MOD; if(a.clogy + a.clogx < a.logx + b.clogx + b.clogy){ c.clogy = b.clogy; c.clogx = a.logx + b.clogx; c.cX = 1ll * a.X * b.cX % MOD; c.cY = b.cY; } return c; } void init(long long NN){ X.assign(NN, 0); Y.assign(NN, 0); long long K = 1; while(K <= NN) K *= 2; N = K; tree.assign(K * 2, {0, 0, 0, 0, 0, 0}); } void add(int node, int l, int r, int pos){ if(pos < l || pos >= r){ return; } if(r - l == 1){ tree[node].X = X[pos]; tree[node].cX = X[pos]; tree[node].cY = Y[pos]; tree[node].logx = log((double)(X[pos])); tree[node].clogx = log((double)(X[pos])); tree[node].clogy = log((double)(Y[pos])); return; } int mid = (l + r) / 2; if(pos < mid){ add(node * 2 + 1, l, mid, pos); } else{ add(node * 2 + 2, mid, r, pos); } tree[node] = comp(tree[node * 2 + 1], tree[node * 2 + 2]); } void add(int pos){ add(0, 0, (int)N, pos); } long long ans(){ return 1ll * tree[0].cX * tree[0].cY % MOD; } }; segtree tree; int init(int NN, int XX[], int YY[]){ int N = NN; tree.init(N); for(int i = 0; i < N; i ++){ tree.X[i] = XX[i]; tree.Y[i] = YY[i]; tree.add(i); } return (int)tree.ans(); } int updateX(int pos, int val){ tree.X[pos] = val; tree.add(pos); return (int)tree.ans(); } int updateY(int pos, int val){ tree.Y[pos] = val; tree.add(pos); return (int)tree.ans(); }
#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...