#include <bits/stdc++.h>
#include "game.h"
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;
}
long long a[15][100005]; 
long long it[15][15][4 * 100005]; 
void build(int r1, int r2, int index, int L, int R) {
  it[r1][r2][index] = 0;
  int mid = (L + R) / 2; 
  build(r1, r2, 2 * index, L, mid);
  build(r1, r2, 2 * index + 1, mid + 1, R); 
}
void updateIt(int r1, int r2, int index, int L, int R, int position, long long value) {
  if (position < L || position > R) {
    return; 
  }
  if (L == R) {
    it[r1][r2][index] = value; 
    return; 
  }
  int mid = (L + R) / 2; 
  updateIt(r1, r2, 2 * index, L, mid, position, value); 
  updateIt(r1, r2, 2 * index + 1, mid + 1, R, position, value); 
  it[r1][r2][index] = gcd2(it[r1][r2][2 * index], it[r1][r2][2 * index + 1]); 
}
long long getIt(int r1, int r2, int index, int L, int R, int l, int r) {
  if (l > R || L > r) {
    return 0LL; 
  }             
  if (l <= L && R <= r) {
    return it[r1][r2][index]; 
  }
  int mid = (L + R) / 2; 
  long long leftValue = getIt(r1, r2, 2 * index, L, mid, l, r); 
  long long rightValue = getIt(r1, r2, 2 * index + 1, mid + 1, R, l, r); 
  return gcd2(leftValue, rightValue); 
}
int n, m; 
void init(int R, int C) {
  n = R;
  m = C; 
  for (int i = 0; i < R; i++) {
    for (int j = 0; j < C; j++) {
      a[i][j] = 0; 
    }
  }
  for (int r1 = 0; r1 < R; r1++) {
    for (int r2 = r1; r2 < R; r2++) {
      build(r1, r2, 1, 0, C - 1); 
    }
  }  
}
void update(int P, int Q, long long K) {
  a[P][Q] = K;
  for (int r1 = P; r1 >= 0; r1--) {
    for (int r2 = P; r2 < n; r2++) {
      long long gcd = K; 
      for (int i = P - 1; i >= r1; i--) {
        gcd = gcd2(gcd, a[i][Q]); 
      }
      for (int i = P + 1; i <= r2; i++) {
        gcd = gcd2(gcd, a[i][Q]); 
      }
      updateIt(r1, r2, 1, 0, m - 1, Q, gcd); 
    }
  } 
}
long long calculate(int P, int Q, int U, int V) {
    long long ans = getIt(P, U, 1, 0, m - 1, Q, V); 
    return ans;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |