This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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;
}
struct segtree
{
int size;
vector<int> values;
void init(int n) {
size=1;
while (size < n) size*=2;
values.resize(2 * size);
}
void set(int i, int v, int x, int qLeft, int qRight) {
if (qRight-qLeft == 1) {
values[x]=v;
return;
}
int mid = (qLeft + qRight) / 2;
if (i < mid) {
set(i, v, 2*x, qLeft, mid);
} else {
set(i, v, 2*x + 1, mid, qRight);
}
values[x]=gcd2(values[2*x], values[2*x + 1]);
}
void set(int i, int v) {
set(i, v, 1, 0, size);
}
int calc(int left, int right, int x, int qLeft, int qRight) {
if (qLeft >= right || qRight <= left) return 0;
if (qLeft >= left && qRight <= right) return values[x];
int mid = (qLeft + qRight) / 2;
int s1 = calc(left, right, 2*x, qLeft, mid);
int s2 = calc(left, right, 2*x + 1, mid, qRight);
return gcd2(s1, s2);
}
int calc(int left, int right) {
return calc(left, right, 1, 0, size);
}
};
vector<segtree> st;
void init(int R, int C) {
st.resize(R);
for (int i = 0; i < R; ++i) st[i].init(C);
}
void update(int P, int Q, long long K) {
st[P].set(Q, K);
}
long long calculate(int P, int Q, int U, int V) {
int ans=0;
for (int i = P; i <= U; ++i)
{
ans=gcd2(ans, st[i].calc(Q, V+1));
}
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... |