제출 #1192663

#제출 시각아이디문제언어결과실행 시간메모리
1192663GoBananas69Wall (IOI14_wall)C++20
컴파일 에러
0 ms0 KiB
#include <algorithm> #include <iostream> #include <vector> using namespace std; typedef long long ll; vector<int> tree, mx, mn; vector<bool> has; void push(int i, int L, int R) { if (L == R || !has[i]) return; int m = (L + R) / 2; int x = 2 * i + 1, y = x + 1; has[i] = false; has[x] = has[y] = true; mn[x] = mx[x] = mn[y] = mx[y] = tree[x] = tree[y] = tree[i]; } void build(int i, int L, int R) { if (L == R) { tree[i] = mx[i] = mn[i] = 0; has[i] = false; return; } int m = (L + R) / 2; int x = 2 * i + 1, y = x + 1; build(x, L, m); build(y, m + 1, R); mx[i] = max(mx[x], mx[y]); mn[i] = min(mn[x], mn[y]); } void add(int i, int L, int R, int l, int r, int v) { if (L == R) { tree[i] = max(tree[i], v); mn[i] = mx[i] = tree[i]; has[i] = true; return; } if (mn[i] >= v) return; if (L == l && R == r && mx[i] <= v) { tree[i] = mn[i] = mx[i] = v; has[i] = true; return; } push(i, L, R); int m = (L + R) >> 1, x = 2 * i + 1, y = x + 1; if (r <= m) { add(x, L, m, l, r, v); } else if (l > m) { add(y, m + 1, R, l, r, v); } else { add(x, L, m, l, m, v); add(y, m + 1, R, m + 1, r, v); } mx[i] = max(mx[x], mx[y]); mn[i] = min(mn[x], mn[y]); } void remove(int i, int L, int R, int l, int r, int v) { if (L == R) { tree[i] = min(tree[i], v); mn[i] = mx[i] = tree[i]; has[i] = true; return; } if (mx[i] <= v) return; if (L == l && R == r && mn[i] >= v) { tree[i] = mn[i] = mx[i] = v; has[i] = true; return; } push(i, L, R); int m = (L + R) >> 1, x = 2 * i + 1, y = x + 1; if (r <= m) { remove(x, L, m, l, r, v); } else if (l > m) { remove(y, m + 1, R, l, r, v); } else { remove(x, L, m, l, m, v); remove(y, m + 1, R, m + 1, r, v); } mx[i] = max(mx[x], mx[y]); mn[i] = min(mn[x], mn[y]); } int query(int i, int L, int R, int p) { if (L == R) { return tree[i]; } push(i, L, R); int m = (L + R) / 2; int x = 2 * i + 1, y = x + 1; if (p <= m) { return query(x, L, m, p); } else { return query(y, m + 1, R, p); } } void buildWall(int n, int k, vector<int>& op, vector<int>& l_, vector<int>& r_, vector<int>& h_, vector<int>& res) { tree.resize(4 * n + 5, 0); mx.resize(4 * n + 5, 0); mn.resize(4 * n + 5, 0); has.resize(4 * n + 5, false); for (int x = 0; x < k; ++x) { int q = op[x]; int l = l_[x], r = r_[x], h = h_[x]; if (q == 1) { add(0, 0, n - 1, l, r, h); } else { remove(0, 0, n - 1, l, r, h); } } for (int i = 0; i < n; ++i) { res[i] = query(0, 0, n - 1, i); } }

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccOSLCnm.o: in function `main':
grader.cpp:(.text.startup+0x133): undefined reference to `buildWall(int, int, int*, int*, int*, int*, int*)'
collect2: error: ld returned 1 exit status