답안 #939949

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
939949 2024-03-07T02:14:12 Z LOLOLO 팀들 (IOI15_teams) C++17
컴파일 오류
0 ms 0 KB
#include "teams.h"
#include <bits/stdc++.h>
using namespace std;
typedef  long long ll;
 
#define           f     first
#define           s     second
#define           pb    push_back
#define           ep    emplace
#define           eb    emplace_back
#define           lb    lower_bound
#define           ub    upper_bound
#define       all(x)    x.begin(), x.end()
#define      rall(x)    x.rbegin(), x.rend()
#define   uniquev(v)    sort(all(v)), (v).resize(unique(all(v)) - (v).begin())
#define     mem(f,x)    memset(f , x , sizeof(f))
#define        sz(x)    (int)(x).size()
#define  __lcm(a, b)    (1ll * ((a) / __gcd((a), (b))) * (b))
#define          mxx    *max_element
#define          mnn    *min_element
#define    cntbit(x)    __builtin_popcountll(x)
#define       len(x)    (int)(x.length())
 
const int N = 2e5 + 100;
const int M = 2e6;
int n;
vector <pair <int, int>> save;
struct node{
    int s = 0;
    int lson, rson;
 
    node() {};
};
 
node seg[M];
int dd = 1, root[N];
 
void build(int id, int l, int r) {
    if (l == r) {
        return;
    }
 
    int m = (l + r) / 2;
    seg[id].lson = dd++;
    seg[id].rson = dd++;
 
    build(seg[id].lson, l, m);
    build(seg[id].rson, m + 1, r);
}
 
void upd(int pid, int id, int l, int r, int v) {
    if (l > v || r < v)
        return;
 
    if (l == r) {
        return;
    }
 
    int m = (l + r) / 2;
    if (v <= m) {
        seg[id].rson = seg[pid].rson;
        seg[id].lson = dd;
        seg[dd].s = seg[seg[pid].lson].s + 1;
        dd++;
        upd(seg[pid].lson, seg[id].lson, l, m, v);
    } else {
        seg[id].lson = seg[pid].lson;
        seg[id].rson = dd;
        seg[dd].s = seg[seg[pid].rson].s + 1;
        dd++;
        upd(seg[pid].rson, seg[id].rson, m + 1, r, v);
    }
}
 
ll get(int id, int l, int r, int u, int v) {
    if (l > v || r < u)
        return 0;
 
    if (l >= u && r <= v) {
        return seg[id].s;
    }
 
    int m = (l + r) / 2;
    return get(seg[id].lson, l, m, u, v) + get(seg[id].rson, m + 1, r, u, v);
}

void build() {
    root[0] = 0;
    build(0, 1, n);

    int j = 0;
    for (int i = 1; i <= n; i++) {
        root[i] = root[i - 1];
        int lst = root[i - 1];
        while (j < sz(save) && save[j].f <= i) {
            dd++;
            root[i] = dd;
            seg[i].s = seg[lst].s + 1;
            upd(lst, root[i], 1, n, save[j].s);
            lst = dd;
            j++;
        }
    }
}

void intit(int sz, vector <int> _a, vector <int> _b) {
    n = sz;
    for (int i = 1; i <= n; i++) {
        save.emplace_back(_a[i - 1], _b[i - 1]);
    }
    sort(all(save));
    build();
}

int can(int m, int v[]) {
    sort(v, v + m);
    vector <int> a;
    for (int i = 0; i < m; i++) {
        a.pb(v[i]);
    }

    uniquev(a);
    deque < pair <int, int>> dq;

    for (int i = 0; i < sz(a) - 1; i++) {
        dq.push_back({a[i], get(root[a[i]], 1, n, a[i], a[i + 1] - 1)});
    }

    for (int i = 0; i < m; i++) {
        int x = v[i];
        while (sz(dq) && x < dq.front().f)
            dq.pop_front();

        while (sz(dq)) {
            auto t = dq.front();
            dq.pop_front();
            if (t.f >= x) {
                if (t.s >= x) {
                    t.s -= x;
                    break;
                } else {
                    x -= t.s;
                }
            }
            dq.push_front(t);
        }

        if (x) {
            return 0;
        }
    }

    return 1;
}

/*int main() {
    return 0;
}*/

Compilation message

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