제출 #1323384

#제출 시각아이디문제언어결과실행 시간메모리
1323384orgiloogiiWall (IOI14_wall)C++20
컴파일 에러
0 ms0 KiB
#include "wall.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ff first
#define ss second

vector <int> lz, sum;
vector <bool> has;
vector <int> lo, hi;
void propagate(int id) {
    int x = id * 2 + 1;
    int y = x + 1;
    lo[x] = max(lo[x], lo[id]);
    hi[x] = max(hi[x], lo[id]);
    lo[x] = min(lo[x], hi[id]);
    hi[x] = min(hi[x], hi[id]);

    lo[y] = max(lo[y], lo[id]);
    hi[y] = max(hi[y], lo[id]);
    lo[y] = min(lo[y], hi[id]);
    hi[y] = min(hi[y], hi[id]);

    lo[id] = -1;
    hi[id] = LLONG_MAX;
}

int query(int id, int l, int r, int i, int val) {
    int cur = max(val, lo[id]);
    cur = min(cur, hi[id]);
    if (l == r)
        return cur;

    propagate(id);

    int mid = (l + r) / 2, x = id * 2 + 1, y = x + 1, a;
    if (i <= mid)
        return query(x, l, mid, i, cur);
    else
        return query(y, mid + 1, r, i, cur);
}

void update(int id, int l, int r, int L, int R, int k) {
     if (L <= l && r <= R) {
        if (k > 0)
            lo[id] = max(lo[id], k);
        else
            hi[id] = min(hi[id], -k);
        return;
    }
    propagate(id);
    int m = (l + r) / 2;
    if (R <= m) {
        update(id * 2 + 1, l, m, L, R, k);
    }
    else if (L > m) {
        update(id * 2 + 2, m + 1, r, L, R, k);
    }
    else {
        update(id * 2 + 1, l, m, L, m, k);
        update(id * 2 + 2, m + 1, r, m + 1, R, k);
    }
}
void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){
    lz.resize(4 * n, 0);
    has.resize(4 * n, 0);
    lo.assign(4 * n, 0);
    hi.assign(4 * n, LLONG_MAX);
    for (int i = 0;i < k;i++) {
        if (op[i] == 1) {
            update(0, 0, n - 1, left[i], right[i], height[i]);
        }
        else {
            update(0, 0, n - 1, left[i], right[i], -height[i]);
        }
    }
    for (int i = 0;i < n;i++) {
        finalHeight[i] = query(0, 0, n - 1, i, 0);
    }
    for (int i = 0;i < n;i++) {
        cout << finalHeight[i] << " ";
    }
    cout << endl;
}
//
//signed main() {
    // int n, k;
    // cin >> n >> k;
    // int op[k], left[k], right[k], height[k], ans[n];
    // for (int i = 0;i < k;i++) {
    //     cin >> op[i] >> left[i] >> right[i] >> height[i];
    // }
    // buildWall(n, k, op, left, right, height, ans);
//}

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

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