#include "game.h"
#include <bits/stdc++.h>
using namespace std;
const int MXN = 2e3 + 5;
int n, m;
map<array<int, 2>, long long> st;
void init(int R, int C) {
n = R, m = C;
}
void updy(int l, int r, int x, int node, int leaf, int ind, long long val)
{
if (l == r)
{
if (leaf) st[{node, x}] = val;
else st[{node, x}] = gcd(st[{2*node, x}], st[{2*node + 1, x}]);
return;
}
int mid = (l + r) >> 1;
if (ind <= mid) updy(l, mid, 2*x, node, leaf, ind, val);
else updy(mid + 1, r, 2*x + 1, node, leaf, ind, val);
st[{node, x}] = gcd(st[{node, 2*x}], st[{node, 2*x + 1}]);
}
void updx(int l, int r, int x, int qx, int qy, long long val)
{
if (l != r)
{
int mid = (l + r) >> 1;
if (qx <= mid) updx(l, mid, 2*x, qx, qy, val);
else updx(mid + 1, r, 2*x + 1, qx, qy, val);
}
updy(0, m - 1, 1, x, (l == r), qy, val);
}
long long gety(int l, int r, int x, int node, int y1, int y2)
{
if (l > y2 || r < y1) return 0;
if (l >= y1 && r <= y2) return st[{node, x}];
int mid = (l + r) >> 1;
return gcd(gety(l, mid, 2*x, node, y1, y2), gety(mid + 1, r, 2*x + 1, node, y1, y2));
}
long long getx(int l, int r, int x, int x1, int y1, int x2, int y2)
{
if (l > x2 || r < x1) return 0;
if (l >= x1 && r <= x2) return gety(0, m - 1, 1, x, y1, y2);
int mid = (l + r) >> 1;
return gcd(getx(l, mid, 2*x, x1, y1, x2, y2), getx(mid + 1, r, 2*x + 1, x1, y1, x2, y2));
}
void update(int P, int Q, long long K) {
updx(0, n - 1, 1, P, Q, K);
}
long long calculate(int P, int Q, int U, int V) {
return getx(0, n - 1, 1, P, Q, U, V);
}
# | 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... |