Submission #681017

#TimeUsernameProblemLanguageResultExecution timeMemory
681017nutellaGame (IOI13_game)C++11
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #include "game.h" using namespace std; using ll = long long; #define gcd(a, b) __gcd(a, b) struct segtree { int l, r; ll d = 0; segtree *left = nullptr, *right = nullptr; void pull() { d = gcd(left ? left->d : 0, right ? right->d : 0); } void update(int i, ll k) { if (l + 1 == r) { d = k; } else { int mid = (l + r) / 2; if (i < mid) { if (!left) { left = new segtree({l, mid}); } left->update(i, k); } else { if (!right) { right = new segtree({mid, r}); } right->update(i, k); } pull(); } } ll query(int lx, int rx) { if (lx >= r || rx <= l) { return 0; } else if (lx <= l && r <= rx) { return d; } else { ll ans = 0; if (left) { ans = gcd(ans, left->query(lx, rx)); } if (right) { ans = gcd(ans, right->query(lx, rx)); } return ans; } } }; int R, C; struct SegmentTree { int l, r; segtree *st = nullptr; SegmentTree *left = nullptr, *right = nullptr; void build_st() { if (!st) { st = new segtree({0, C}); } } ll simple_query(int y) { if (!st) { return 0; } else { return st->query(y, y + 1); } } void update(int x, int y, ll k) { build_st(); if (l + 1 == r) { st->update(y, k); } else { int mid = (l + r) / 2; if (x < mid) { if (!left) { left = new SegmentTree({l, mid}); } left->update(x, y, k); } else { if (!right) { right = new SegmentTree({mid, r}); } right->update(x, y, k); } st->update(y, gcd((left ? left->simple_query(y) : 0), (right ? right->simple_query(y) : 0))); } } ll query(int lx, int rx, int ly, int ry) { if (l >= rx || lx >= r) { return 0; } else if (lx <= l && r <= rx) { if (!st) { return 0; } else { return st->query(ly, ry); } } else { ll ans = 0; if (left) { ans = gcd(ans, left->query(lx, rx, ly, ry)); } if (right) { ans = gcd(ans, right->query(lx, rx, ly, ry)); } return ans; } } }; SegmentTree *root = nullptr; void init(int R, int C) { ::R = R, ::C = C; root = new SegmentTree({0, R}); } void update(int P, int Q, ll K) { root->update(P, Q, K); } ll calculate(int P, int Q, int U, int V) { return root->query(P, U + 1, Q, V + 1); }

Compilation message (stderr)

game.cpp: In member function 'void segtree::update(int, ll)':
game.cpp:27:48: error: no matching function for call to 'segtree::segtree(<brace-enclosed initializer list>)'
   27 |                     left = new segtree({l, mid});
      |                                                ^
game.cpp:9:8: note: candidate: 'segtree::segtree()'
    9 | struct segtree {
      |        ^~~~~~~
game.cpp:9:8: note:   candidate expects 0 arguments, 1 provided
game.cpp:9:8: note: candidate: 'constexpr segtree::segtree(const segtree&)'
game.cpp:9:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const segtree&'
game.cpp:9:8: note: candidate: 'constexpr segtree::segtree(segtree&&)'
game.cpp:9:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'segtree&&'
game.cpp:32:49: error: no matching function for call to 'segtree::segtree(<brace-enclosed initializer list>)'
   32 |                     right = new segtree({mid, r});
      |                                                 ^
game.cpp:9:8: note: candidate: 'segtree::segtree()'
    9 | struct segtree {
      |        ^~~~~~~
game.cpp:9:8: note:   candidate expects 0 arguments, 1 provided
game.cpp:9:8: note: candidate: 'constexpr segtree::segtree(const segtree&)'
game.cpp:9:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const segtree&'
game.cpp:9:8: note: candidate: 'constexpr segtree::segtree(segtree&&)'
game.cpp:9:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'segtree&&'
game.cpp: In member function 'void SegmentTree::build_st()':
game.cpp:71:36: error: no matching function for call to 'segtree::segtree(<brace-enclosed initializer list>)'
   71 |             st = new segtree({0, C});
      |                                    ^
game.cpp:9:8: note: candidate: 'segtree::segtree()'
    9 | struct segtree {
      |        ^~~~~~~
game.cpp:9:8: note:   candidate expects 0 arguments, 1 provided
game.cpp:9:8: note: candidate: 'constexpr segtree::segtree(const segtree&)'
game.cpp:9:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const segtree&'
game.cpp:9:8: note: candidate: 'constexpr segtree::segtree(segtree&&)'
game.cpp:9:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'segtree&&'
game.cpp: In member function 'void SegmentTree::update(int, int, ll)':
game.cpp:93:52: error: no matching function for call to 'SegmentTree::SegmentTree(<brace-enclosed initializer list>)'
   93 |                     left = new SegmentTree({l, mid});
      |                                                    ^
game.cpp:63:8: note: candidate: 'SegmentTree::SegmentTree()'
   63 | struct SegmentTree {
      |        ^~~~~~~~~~~
game.cpp:63:8: note:   candidate expects 0 arguments, 1 provided
game.cpp:63:8: note: candidate: 'constexpr SegmentTree::SegmentTree(const SegmentTree&)'
game.cpp:63:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const SegmentTree&'
game.cpp:63:8: note: candidate: 'constexpr SegmentTree::SegmentTree(SegmentTree&&)'
game.cpp:63:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'SegmentTree&&'
game.cpp:99:53: error: no matching function for call to 'SegmentTree::SegmentTree(<brace-enclosed initializer list>)'
   99 |                     right = new SegmentTree({mid, r});
      |                                                     ^
game.cpp:63:8: note: candidate: 'SegmentTree::SegmentTree()'
   63 | struct SegmentTree {
      |        ^~~~~~~~~~~
game.cpp:63:8: note:   candidate expects 0 arguments, 1 provided
game.cpp:63:8: note: candidate: 'constexpr SegmentTree::SegmentTree(const SegmentTree&)'
game.cpp:63:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const SegmentTree&'
game.cpp:63:8: note: candidate: 'constexpr SegmentTree::SegmentTree(SegmentTree&&)'
game.cpp:63:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'SegmentTree&&'
game.cpp: In function 'void init(int, int)':
game.cpp:138:34: error: no matching function for call to 'SegmentTree::SegmentTree(<brace-enclosed initializer list>)'
  138 |     root = new SegmentTree({0, R});
      |                                  ^
game.cpp:63:8: note: candidate: 'SegmentTree::SegmentTree()'
   63 | struct SegmentTree {
      |        ^~~~~~~~~~~
game.cpp:63:8: note:   candidate expects 0 arguments, 1 provided
game.cpp:63:8: note: candidate: 'constexpr SegmentTree::SegmentTree(const SegmentTree&)'
game.cpp:63:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const SegmentTree&'
game.cpp:63:8: note: candidate: 'constexpr SegmentTree::SegmentTree(SegmentTree&&)'
game.cpp:63:8: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'SegmentTree&&'