Submission #376040

#TimeUsernameProblemLanguageResultExecution timeMemory
376040wind_reaperGame (IOI13_game)C++17
37 / 100
13091 ms8304 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; struct SegmentTree{ struct Node{ int64_t val; Node *lc, *rc; Node() : lc(0), rc(0) { val = 0LL; } }; deque<Node> tree; Node* new_node(){ tree.emplace_back(); return &tree.back(); } Node *root; int L, R; void init(int _L, int _R){ this->L = _L; this->R = _R; root = new_node(); } void update(int idx, int64_t val, Node* &node, int l, int r){ if(!node) node = new_node(); if(r - l == 1){ node->val = val; return; } int mid = (l + r) >> 1; if(idx < mid) update(idx, val, node->lc, l, mid); else update(idx, val, node->rc, mid, r); node->val = __gcd((node->lc ? node->lc->val : 0), (node->rc ? node->rc->val : 0)); } int64_t query(int l, int r, Node* &node, int lx, int rx){ if(r <= lx || l >= rx || !node) return 0; if(lx >= l && rx <= r) return node->val; int mid = (lx + rx) >> 1; return __gcd(query(l, r, node->lc, lx, mid), query(l, r, node->rc, mid, rx)); } void update(int idx, int64_t val){ update(idx, val, root, L, R); } int64_t query(int l, int r){ return query(l, r, root, L, R); } }; vector<SegmentTree> T; void init(int R, int C) { T.resize(R); for(int i = 0; i < R; i++){ T[i].init(0, C); } } void update(int P, int Q, long long K) { T[P].update(Q, K); } long long calculate(int P, int Q, int U, int V) { int64_t res = 0; for(int i = P; i <= U; i++){ res = __gcd(res, T[i].query(Q, V+1)); } return res; }
#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...