Submission #687920

#TimeUsernameProblemLanguageResultExecution timeMemory
687920vjudge1Game (IOI13_game)C++17
Compilation error
0 ms0 KiB
//#include <game.h>
#include <bits/stdc++.h>
#define int long long
#define ii pair<int,int>
#define ff first
#define ss second

using namespace std;
const int oo = 2e9;

struct node {
    node *l, *r;
    int wt, val, g;
    ii co;
    node (ii pos, int x)
    {
        l = r = 0;
        wt = rand();
        val = g = x;
        co = pos;
    }
};
#define nd node*

inline int gg(nd x) {return x ? x->g : 0;}
inline void upd(nd x) {x->g = __gcd(__gcd(gg(x->l), gg(x->r)), x->val);}

inline void merg(nd &x, nd l, nd r)
{
    if (!l || !r) return void(x=l?l:r);
    if (l->wt < r->wt) merg(r->l, l, r->l), x = r;
    else merg(l->r, l->r, r), x = l;
    upd(x);
}

inline void split(nd x, nd &l, nd &r, ii pos)
{
    if (!x) return void(l=r=0);
    if (x->co <= pos) split(x->r, x->r, r, pos), l = x;
    else split(x->l, l, x->l, pos), r = x;
    upd(x);
}

inline void ins(nd &x, ii pos, int val)
{
    node *a, *b;
    split(x, x, a, {pos.ff, pos.ss-1});
    split(a, a, b, pos);
    merg(x, x, new node(pos, val));
//    merg(a, a, b);
    merg(x, x, b);
}

inline int qry1(nd &x, int l, int r)
{
    node *a, *b;
    split(x, x, a, {l-1, oo});
    split(a, a, b, {r, oo});
    int ans = gg(a);
    merg(a, a, b);
    merg(x, x, a);
    return ans;
}

struct Node {
    Node *l, *r;
    nd st;
    Node() {
        l = r = 0;
        st = 0;
    }
};
Node *root = new Node();

inline void upd(Node *&cur, int lx, int rx, int x, int y, int val)
{
    if (!cur) cur = new Node();
    ins(cur->st, {y, x}, val);
    if (lx == rx) return;
    int m = (lx + rx) >> 1;
    if (x <= m) upd(cur->l, lx, m, x, y, val);
    else upd(cur->r, m+1, rx, x, y, val);
}

inline int qry(Node *&x, int lb, int rb, int lx, int rx, int ly, int ry)
{
    if (lx > rx || !x) return 0;
    else if (lb == lx && rb == rx) return qry1(x->st, ly, ry);
    int m = (lb + rb) >> 1;
    return __gcd(qry(x->l, lb, m, lx, min(rx, m), ly, ry),
                 qry(x->r, m+1, rb, max(lx, m+1), rx, ly, ry));
}

int l1, r1;
void init(signed r, signed c) {
    l1 = 0, r1 = r - 1;
}

void update(signed x, signed y, int k) {
    upd(root, l1, r1, x, y, k);
}

int calculate(signed x, signed y, signed u, signed v) {
    return qry(root, l1, r1, x, u, y, v);
}

//signed main()
//{
//    ios_base::sync_with_stdio(false);
//    cin.tie(nullptr); cout.tie(nullptr);
//    init(2, 3);
//    update(0, 0, 20);
//    update(0, 2, 15);
//    update(1, 1, 12);
//    cerr<<calculate(0, 0, 0, 2)<<"\n";
//    cerr<<calculate(0, 0, 1, 1)<<"\n";
//    update(0, 1, 6);
//    update(1, 1, 14);
//    cerr<<calculate(0, 0, 0, 2)<<"\n";
//    cerr<<calculate(0, 0, 1, 1)<<"\n";
//}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccbYjawu.o: in function `main':
grader.c:(.text.startup+0x6b): undefined reference to `init'
/usr/bin/ld: grader.c:(.text.startup+0xd0): undefined reference to `calculate'
/usr/bin/ld: grader.c:(.text.startup+0x13e): undefined reference to `update'
collect2: error: ld returned 1 exit status