Submission #1246584

#TimeUsernameProblemLanguageResultExecution timeMemory
1246584aykhnGame (IOI13_game)C++20
0 / 100
1 ms328 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; const int MXN = 2e3 + 5; struct NodeY { long long val = 0; NodeY *left = nullptr, *right = nullptr; }; struct NodeX { NodeX *left = nullptr, *right = nullptr; NodeY *treeY = nullptr; }; int n, m; // Update Y-axis segment tree void updateY(NodeY* &node, int ly, int ry, int y, long long val) { if (!node) node = new NodeY(); if (ly == ry) { node->val = val; return; } int my = (ly + ry) / 2; if (y <= my) updateY(node->left, ly, my, y, val); else updateY(node->right, my + 1, ry, y, val); long long lv = node->left ? node->left->val : 0; long long rv = node->right ? node->right->val : 0; node->val = gcd(lv, rv); } // Update X-axis tree, propagating to Y void updateX(NodeX* &node, int lx, int rx, int x, int y, long long val) { if (!node) node = new NodeX(); updateY(node->treeY, 0, m - 1, y, val); if (lx == rx) return; int mx = (lx + rx) / 2; if (x <= mx) updateX(node->left, lx, mx, x, y, val); else updateX(node->right, mx + 1, rx, x, y, val); } // Query Y-tree long long queryY(NodeY* node, int ly, int ry, int y1, int y2) { if (!node || ry < y1 || ly > y2) return 0; if (y1 <= ly && ry <= y2) return node->val; int my = (ly + ry) / 2; return gcd( queryY(node->left, ly, my, y1, y2), queryY(node->right, my + 1, ry, y1, y2) ); } // Query X-tree long long queryX(NodeX* node, int lx, int rx, int x1, int x2, int y1, int y2) { if (!node || rx < x1 || lx > x2) return 0; if (x1 <= lx && rx <= x2) return queryY(node->treeY, 0, m - 1, y1, y2); int mx = (lx + rx) / 2; return gcd( queryX(node->left, lx, mx, x1, x2, y1, y2), queryX(node->right, mx + 1, rx, x1, x2, y1, y2) ); } NodeX *root = nullptr; void init(int R, int C) { n = R, m = C; } void update(int P, int Q, long long K) { updateX(root, 0, n - 1, P, Q, K); } long long calculate(int P, int Q, int U, int V) { return queryX(root, 0, n - 1, P, U, Q, V); }
#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...