제출 #410657

#제출 시각아이디문제언어결과실행 시간메모리
410657Haruto810198벽 (IOI14_wall)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
//#include "wall.h"

using namespace std;

#define int long long
#define double long double

#define FOR(i,l,r,d) for(int i=(l);i<=(r);i+=(d))
#define szof(x) ((x).size())

#define vi vector<int>
#define pii pair<int,int>

#define F first
#define S second

#define pb push_back
#define eb emplace_back
#define mkp make_pair

//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("unroll-loops")

#define V st[cidx]
#define LC st[cidx*2]
#define RC st[cidx*2+1]

const int INF = 2147483647;
const int MOD = 1000000007;
const int mod = 998244353;
const double eps = 1e-12;

const int MAX = 2000010;

struct Node{
    int sl, sr;
    int tagl, tagr;
};

Node st[4*MAX];

void build(int cidx, int cl, int cr){
    V.sl = cl;
    V.sr = cr;
    V.tagl = 0;
    V.tagr = 0;
    if(cl < cr){
        int mid = (cl + cr) / 2;
        build(cidx*2, cl, mid);
        build(cidx*2+1, mid+1, cr);
    }
}

void addtag(int cidx, int mmin, int mmax){
    if(mmin > V.tagr){
        V.tagl = V.tagr = mmin;
    }
    else if(mmax < V.tagl){
        V.tagl = V.tagr = mmax;
    }
    else{
        V.tagl = max(V.tagl, mmin);
        V.tagr = min(V.tagr, mmax);
    }
}

void pushtag(int cidx){
    if(V.sl < V.sr){
        addtag(cidx*2, V.tagl, V.tagr);
        addtag(cidx*2+1, V.tagl, V.tagr);
    }
    V.tagl = -INF;
    V.tagr = INF;
}

void modify(int cidx, int ml, int mr, int mmin, int mmax){
    if(mr<V.sl or V.sr<ml){
        return;
    }
    else if(ml<=V.sl and V.sr<=mr){
        addtag(cidx, mmin, mmax);
        return;
    }
    else{
        pushtag(cidx);
        modify(cidx*2, ml, mr, mmin, mmax);
        modify(cidx*2+1, ml, mr, mmin, mmax);
    }
}

int query(int cidx, int qidx){
    if(V.sl==qidx and V.sr==qidx){
        return V.tagl;
    }
    else{
        pushtag(cidx);
        int mid = (V.sl + V.sr) / 2;
        if(qidx <= mid){
            return query(cidx*2, qidx);
        }
        else{
            return query(cidx*2+1, qidx);
        }
    }
}

void buildWall(int n, int k, int* op, int* left, int* right, int* height, int* finalHeight){

    build(1, 0, n-1);

    FOR(i,0,k-1,1){
        if(op[i]==1){ /// Max
            modify(1, left[i], right[i], height[i], INF);
        }
        else if(op[i]==2){ /// min
            modify(1, left[i], right[i], -INF, height[i]);
        }
    }

    FOR(i,0,n-1,1){
        finalHeight[i] = query(1, i);
    }

}

/*
int _n, _k;
int _op[MAX], _left[MAX], _right[MAX], _height[MAX], _finalHeight[MAX];

signed main(){

    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin>>_n>>_k;
    FOR(i,0,_k-1,1){
        cin>>_op[i]>>_left[i]>>_right[i]>>_height[i];
    }

    buildWall(_n, _k, _op, _left, _right, _height, _finalHeight);

    FOR(i,0,_n-1,1){
        cout<<_finalHeight[i]<<' ';
    }
    cout<<'\n';

    return 0;

}
*/

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

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