Submission #1324807

#TimeUsernameProblemLanguageResultExecution timeMemory
1324807baodatWall (IOI14_wall)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define FOR(i, l, r) for(int i = l; i <= r; i++)
#define FORD(i, l, r) for(int i = l; i >= r; i--)
#define db double
#define ldb long double
#define all_1(x) (x).begin() + 1, (x).end()
#define all(x) (x).begin(), (x).end()
#define ins insert
#define pb push_back
template<typename T>void debug_var(const T& var, const string& name){
    cerr << name << ": " << var << "\n";
}
template<typename T>void debug_1d(const T& vt, const string& name){
    if(vt.empty()){
        cerr << name << " is empty!\n";
        return;
    }
    FOR(i, 0, (int)vt.size() - 1){
        cerr << name << "[" << i << "]: " << vt[i] << "\n";
    }
}
struct node{
    int maxi, mini;
    node(){
        maxi = 0;
        mini = 2e9;
    }
};
struct segment_tree{
    int _n;
    vector<node> _st;
    segment_tree(int n = 0){
        init(n);
    }
    void init(int n){
        _n = n;
        _st.assign(4 * _n + 5, node());
    }
    void apply(int i, int low, int high) {
    _st[i].mini = max(_st[i].mini, low);
    _st[i].maxi = max(_st[i].maxi, low);
    
    _st[i].maxi = min(_st[i].maxi, high);
    _st[i].mini = min(_st[i].mini, high);
    }
    void down(int i) {
        int cl = (i << 1), cr = (cl | 1);
        apply(cl, _st[i].mini, _st[i].maxi);
        apply(cr, _st[i].mini, _st[i].maxi);
        
        _st[i].mini = 0;
        _st[i].maxi = 2e9;      
    }
    void update_chmax(int i, int l, int r, int u, int v, int val){
        if(l > v || r < u) return;
        //add bricks
        if(l >= u && r <= v){
            _st[i].maxi = max(_st[i].maxi, val);
            _st[i].mini = max(_st[i].mini, val);
            return;
        }
        down(i);
        int m = (l + r) >> 1, cl = (i << 1), cr = (cl | 1);
        update_chmax(cl, l, m, u, v, val);
        update_chmax(cr, m + 1, r, u, v, val);
    }

    void update_chmin(int i, int l, int r, int u, int v, int val){
        if(l > v || r < u) return;
        //add bricks
        if(l >= u && r <= v){
            _st[i].maxi = min(_st[i].maxi, val);
            _st[i].mini = min(_st[i].mini, val);
            return;
        }
        down(i);
        int m = (l + r) >> 1, cl = (i << 1), cr = (cl | 1);
        update_chmin(cl, l, m, u, v, val);
        update_chmin(cr, m + 1, r, u, v, val);
    }
    void build_ans(int i, int l, int r, vector<int>& res){
        if(l == r){
            res[l - 1] = min(_st[i].maxi, _st[i].mini);
            return;
        }
        int m = (l + r) >> 1, cl = (i << 1), cr = (cl | 1);
        down(i);
        build_ans(cl, l, m, res);
        build_ans(cr, m + 1, r, res);
    }
};
void buildWall(int n, int k, vector<int> op, vector<int> left, vector<int> right, vector<int> height, vector<int>& finalHeight){
    segment_tree st(n + 5);
    finalHeight.assign(n, 0);
    FOR(i, 0, k - 1){
        if(op[i] == 1) st.update_chmax(1, 1, n, left[i] + 1, right[i] + 1, height[i]);
        else st.update_chmin(1, 1, n, left[i] + 1, right[i] + 1, height[i]);
    }
    st.build_ans(1, 1, n, finalHeight);
}
/*
void solve(){
    int n = 10, k = 6;
    vector<int> op = {1, 2, 2, 1, 1, 2};
    vector<int> left = {1, 4, 3, 0, 2, 6};
    vector<int> right = {8, 9, 6, 5, 2, 7};
    vector<int> height = {4, 1, 5, 3, 5, 0};
    vector<int> res;
    buildWall(n, k, op, left, right, height, res);
    for(int i : res) cout << i << " ";
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    //cin >> t;
    while(t--){
        solve();
    }
    return 0;
}
*/

Compilation message (stderr)

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