Submission #1240167

#TimeUsernameProblemLanguageResultExecution timeMemory
1240167codergWall (IOI14_wall)C++20
Compilation error
0 ms0 KiB
#include "wall.h" #include <bits/stdc++.h> using namespace std; typedef long long ll ; const ll MAXN = 2000001; const ll INF = 1e9; struct Node { ll min_val, max_val, lazy_min,lazy_max; Node() { min_val = 0; max_val = INF; lazy_min = 0; lazy_max = INF; } }; Node tree[4*MAXN]; void push_lazy(ll node, ll l, ll r) { if (l == r) return; // propagate max operations if (tree[node].lazy_max != INF) { ll val = tree[node].lazy_max, newlevel=node<<1; for (ll child = newlevel+1; child <= newlevel+2; child++) { tree[child].max_val = min(tree[child].max_val, val); tree[child].min_val = min(tree[child].min_val, val); tree[child].lazy_max = min(tree[child].lazy_max, val); tree[child].lazy_min = min(tree[child].lazy_min, val); } tree[node].lazy_max = INF; } // propagate min operations if (tree[node].lazy_min != 0) { ll newlevel=node<<1; ll val = tree[node].lazy_min; for (ll child = newlevel+1; child <= newlevel+2; child++) { tree[child].max_val = max(tree[child].max_val, val); tree[child].min_val = max(tree[child].min_val, val); tree[child].lazy_max = max(tree[child].lazy_max, val); tree[child].lazy_min = max(tree[child].lazy_min, val); } tree[node].lazy_min = 0; } } // for op 2 , to limit the maximum height void update_max(ll node, ll l, ll r, ll a, ll b, ll val) { push_lazy(node, l, r); if (b < l || a > r) return; if (a <= l && r <= b) { tree[node].max_val = min(tree[node].max_val, val); tree[node].min_val = min(tree[node].min_val, val); tree[node].lazy_max = min(tree[node].lazy_max, val); tree[node].lazy_min = min(tree[node].lazy_min, val); return; } ll m = (l + r) / 2,newlevel=node<<1; update_max(newlevel+1, l, m, a, b, val); update_max(newlevel+2, m+1, r, a, b, val); tree[node].min_val = min(tree[newlevel+1].min_val, tree[newlevel+2].min_val); tree[node].max_val = max(tree[newlevel+1].max_val, tree[newlevel+2].max_val); } // for op 1 , to set a minimum height void update_min(ll node, ll l, ll r, ll a, ll b, ll val) { push_lazy(node, l, r); if (b < l || a > r) return; if (a <= l && r <= b) { tree[node].max_val = max(tree[node].max_val, val); tree[node].min_val = max(tree[node].min_val, val); tree[node].lazy_max = max(tree[node].lazy_max, val); tree[node].lazy_min = max(tree[node].lazy_min, val); return; } ll m = (l + r) / 2,newlevel=node<<1; update_min(newlevel+1, l, m, a, b, val); update_min(newlevel+2, m+1, r, a, b, val); tree[node].min_val = min(tree[newlevel+1].min_val, tree[newlevel+2].min_val); tree[node].max_val = max(tree[newlevel+1].max_val, tree[newlevel+2].max_val); } // to build final heights void build_final(ll node, ll l, ll r, ll finalHeight[]) { push_lazy(node, l, r); if (l == r) { finalHeight[l] = tree[node].min_val; return; } ll m = (l + r) / 2,newlevel=node<<1;; build_final(newlevel+1, l, m, finalHeight); build_final(newlevel+2, m+1, r, finalHeight); } void buildWall(ll n, ll k, ll op[], ll left[], ll right[], ll height[], ll finalHeight[]) { for (ll i = 0; i < 4*MAXN; i++) { tree[i] = Node(); } for (ll i = 0; i < k; i++) { if (op[i] == 1) { // add blocks (min height) update_min(0, 0, n-1, left[i], right[i], height[i]); } else { // remove blocks (max height) update_max(0, 0, n-1, left[i], right[i], height[i]); } } build_final(0, 0, n-1, finalHeight); }

Compilation message (stderr)

/usr/bin/ld: /tmp/cc2piC6I.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