Submission #97678

#TimeUsernameProblemLanguageResultExecution timeMemory
97678tincamateiGame (IOI13_game)C++14
37 / 100
13102 ms137348 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; } int R, C; long long **aint; void updateSmall(int anod, int poz, long long val, int l, int r, int nod = 1) { if(poz < l || r < poz) return; if(l == r) aint[anod][nod] = val; else if(l < r) { int mid = (l + r) / 2; updateSmall(anod, poz, val, l, mid, 2 * nod); updateSmall(anod, poz, val, mid + 1, r, 2 * nod + 1); aint[anod][nod] = gcd2(aint[anod][2 * nod], aint[anod][2 * nod + 1]); } } void updateBig(int i, int j, long long val, int l, int r, int nod = 1) { if(i < l || r < i) return; updateSmall(nod, j, val, 0, C - 1); if(l < r) { int mid = (l + r) / 2; updateBig(i, j, val, l, mid, 2 * nod); updateBig(i, j, val, mid + 1, r, 2 * nod + 1); } } long long querySmall(int anod, int i, int j, int l, int r, int nod = 1) { if(r < i || j < l) return 0; if(i <= l && r <= j) return aint[anod][nod]; else if(l < r) { int mid = (l + r) / 2; return gcd2(querySmall(anod, i, j, l, mid, 2 * nod), querySmall(anod, i, j, mid + 1, r, 2 * nod + 1)); } return 0; } long long queryBig(int p, int q, int u, int v, int l, int r, int nod = 1) { if(r < p || u < l) return 0; if(p <= l && r <= u) return querySmall(nod, q, v, 0, C - 1); else if(l < r) { int mid = (l + r) / 2; return gcd2(queryBig(p, q, u, v, l, mid, 2 * nod), queryBig(p, q, u, v, mid + 1, r, 2 * nod + 1)); } return 0; } void init(int _R, int _C) { R = _R; C = _C; aint = new long long*[1+4*_R]; for(int i = 0; i < 1 + 4 * _R; ++i) { aint[i] = new long long[1+4*_C]; for(int j = 0; j < 1 + 4 * _C; ++j) aint[i][j] = 0LL; } } void update(int P, int Q, long long K) { //updateBig(P, Q, K, 0, R - 1); updateSmall(P, Q, K, 0, C - 1); //aint[P][Q] = K; } long long calculate(int P, int Q, int U, int V) { //long long rez = 0LL; //for(int i = P; i <= U; ++i) // for(int j = Q; j <= V; ++j) // rez = gcd2(aint[i][j], rez); long long rez = 0LL; for(int i = P; i <= U; ++i) rez = gcd2(rez, querySmall(i, Q, V, 0, C - 1)); return rez;//queryBig(P, Q, U, V, 0, R - 1); }

Compilation message (stderr)

grader.c: In function 'int main()':
grader.c:18:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
  int 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...