Submission #729693

#TimeUsernameProblemLanguageResultExecution timeMemory
729693NeroZeinGame (IOI13_game)C++17
27 / 100
634 ms27148 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; long long gcd2(long long X, long long Y) { long long tmp; while (X != Y && Y != 0) { tmp = X; X = Y; Y = tmp % Y; } return X; } const int N = 1000005; vector<vector<long long>> a; int id; int rt[11]; long long seg[N << 2]; void build (int nd, int l, int r) { if (l == r) { id = max(id, nd); return; } int mid = (l + r) >> 1; int rs = nd + ((mid - l + 1) << 1); build(nd + 1, l, mid); build(rs, mid + 1, r); } void upd (int nd, int l, int r, int p, long long v) { if (l == r) { seg[nd] = v; return; } int mid = (l + r) >> 1; int rs = nd + ((mid - l + 1) << 1); if (p <= mid) { upd(nd + 1, l, mid, p, v); } else { upd(rs, mid + 1, r, p, v); } seg[nd] = __gcd(seg[nd + 1], seg[rs]); } long long qry (int nd, int l, int r, int s, int e) { if (l >= s && r <= e) { return seg[nd] ; } int mid = (l + r) >> 1; int rs = nd + ((mid - l + 1) << 1); if (mid >= e) { return qry(nd + 1, l, mid, s, e); } else { if (mid < s) { return qry(rs, mid + 1, r, s, e); } else { return gcd2(qry(nd + 1, l, mid, s, e), qry(rs, mid + 1, r, s, e)); } } } int c, r; void init(int R, int C) { a.resize(R); r = R; c = C; for (int i = 0; i < R; ++i) { a[i].assign(C, 0); } for (int i = 0; i < R; ++i) { rt[i] = id + 1; build(id + 1, 0, C - 1); } } void update(int P, int Q, long long K) { upd(rt[P], 0, c - 1, Q, K); } long long calculate(int P, int Q, int U, int V) { long long g = 0; for (int i = P; i <= U; ++i) { g = gcd2(g, qry(rt[i], 0, c - 1, Q, V)); } return g; }
#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...