제출 #945800

#제출 시각아이디문제언어결과실행 시간메모리
945800mansur게임 (IOI13_game)C++17
0 / 100
13068 ms140476 KiB
#include "game.h" #include<bits/stdc++.h> using namespace std; #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() #define sz(a) (int)a.size() #define s second #define f first using ll = long long; using pii = pair<int, int>; using pll = pair<ll, ll>; const int N = 1e5 + 1; int n, m, lg[N]; ll vl[10][100000], up[10][100000][17]; 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; } ll get(int R, int l, int r) { int k = lg[r - l + 1]; return gcd2(up[R][l][k], up[R][r - (1 << k) + 1][k]); } void bld(int R) { for (int k = 0; k < 17; k++) { for (int i = 0; i < m - (1 << k) + 1; i++) { if (k) { up[R][i][k] = gcd2(up[R][i][k - 1], up[R][i + (1 << (k - 1))][k - 1]); }else up[R][i][k] = vl[R][i]; } } } void init(int R, int C) { n = R, m = C; lg[0] = -1; for (int i = 1; i <= m; i++) lg[i] = lg[i / 2] + 1; } void update(int P, int Q, ll K) { vl[P][Q] = K; bld(P); } ll calculate(int P, int Q, int U, int V) { ll ans = 0; for (int i = P; i <= U; i++) { ans = gcd2(ans, get(i, Q, V)); } return ans; }
#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...