제출 #200105

#제출 시각아이디문제언어결과실행 시간메모리
200105johutha게임 (IOI13_game)C++14
10 / 100
13104 ms256004 KiB
#include "game.h" #include <vector> #include <iostream> #include <array> #include <cassert> #define int long long #define par array<int,2> using namespace std; int gcd(int a, int b) { if (a > b) swap(a, b); if (a == 0) return b; return gcd(b % a, a); } struct st2d { vector<vector<int>> table; vector<int> ns; int query(par ql, par qr, int l, int r, par pos, int dim) { // cout << dim << " " << ql[dim] << " " << qr[dim] << " " << l << " " << r << " " << pos[0] << " " << pos[1] << "\n"; if (ql[dim] <= l && r <= qr[dim]) { if (dim == 1) return table[pos[0]][pos[1]]; return query(ql, qr, 0, ns[1] - 1, pos, dim + 1); } if (r < ql[dim] || qr[dim] < l) return 0; par p1 = pos; par p2 = pos; p1[dim] = 2*pos[dim] + 1; p2[dim] = 2*pos[dim] + 2; return gcd(query(ql, qr, l, (l + r)/2, p1, dim), query(ql, qr, (l + r)/2 + 1, r, p2, dim)); } void update(par k, int v, int l, int r, par pos, int dim) { if (l == r) { if (dim == 1) table[pos[0]][pos[1]] = v; else update(k, v, 0, ns[1] - 1, pos, dim + 1); return; } par p1 = pos; par p2 = pos; p1[dim] = 2*pos[dim] + 1; p2[dim] = 2*pos[dim] + 2; if (k[dim] <= (l + r)/2) update(k, v, l, (l + r)/2, p1, dim); else update(k, v, (l + r)/2 + 1, r, p2, dim); if (dim == 1) table[pos[0]][pos[1]] = gcd(table[pos[0]][2*pos[1] + 1], table[pos[0]][2*pos[1] + 2]); else { for (int i = 0; i < 4*ns[1]; i++) { table[pos[0]][i] = gcd(table[2*pos[0] + 1][i], table[2*pos[0] + 2][i]); } } } void print() { for (auto t : table) { for (auto i : t) cout << i << " "; cout << "\n"; } cout << "\n"; } }; st2d st; int r; int c; void init(signed R, signed C) { r = R; c = C; st.table.resize(4*R, vector<int>(4*C)); st.ns.resize(2); st.ns[0] = R; st.ns[1] = C; } void update(signed P, signed Q, int K) { // cout << "\n"; st.update({P, Q}, K, 0, r - 1, {0, 0}, 0); // st.print(); } int calculate(signed P, signed Q, signed U, signed V) { // cout << "\n"; if (U < P) swap(U, P); if (V < Q) swap(Q, V); assert(P <= U); assert(Q <= V); int ret = st.query({P, Q}, {U, V}, 0, r - 1, {0, 0}, 0); // cout << "Ok: " << ret << "\n"; return ret; }

컴파일 시 표준 에러 (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...