제출 #1181227

#제출 시각아이디문제언어결과실행 시간메모리
1181227n3rm1n게임 (IOI13_game)C++17
컴파일 에러
0 ms0 KiB
#include<iostream> #include "game.h" using namespace std; /// struct struct Tnode { long long val; Tnode *l, *r; Tnode() { val = 0; l = NULL; r = NULL; } }; struct Tree { Tnode *node; Tree *l, *r; Tree() { node = NULL; l = NULL; r = NULL; } }; Tree *root = NULL; long long r, c; long long qL, qR, ql, qr; long long updPos, updpos, updvalue; long long gcd(long long x, long long y) { while (x && y) { if(x > y)x %= y; else y %= x; } return x + y; } /// query long long query(Tnode *t, long long l, long long r) { if(qr < l && ql > r)return 0; if(r < l)return 0; if(t == NULL)return 0; if(ql <= l && r <= qr)return t -> val; long long mid = (l + r)/2; long long fhalf = query(t -> l, l, mid); long long shalf = query(t -> r, mid+1, r); return gcd(fhalf, shalf); } long long Query(Tree *t, long long l, long long r) { if(qR < l || qL > r)return 0; if(r < l)return 0; if(t == NULL)return 0; if(qL <= l && r <= qR) { return query(t -> node, 0, c-1); } long long mid = (l + r)/2; long long fhalf = Query(t -> l, l, mid); long long shalf = Query(t -> r, mid+1, r); return gcd(fhalf, shalf); } /// update long long merge0(Tnode *&t0, Tnode *&t1) { if(t0 == NULL && t1 == NULL)return 0; if(t0 == NULL)return t1 -> val; if(t1 == NULL)return t0 -> val; return gcd(t0 -> val, t1 -> val); } void upd(Tnode *&t, long long l, long long r) { if(t == NULL)t = new Tnode; if(l == r) { t -> val = updvalue; return; } long long mid = (l + r)/2; if(updpos <= mid)upd(t -> l, l, mid); else upd(t -> r, mid+1, r); t -> val = merge0(t -> l, t -> r); } Tnode *getValue(Tree *&t) { if(t == NULL)return NULL; else return t -> node; } long long getvalue(Tnode *&t) { if(t == NULL)return 0; return t -> val; } void Merge(Tnode *&t, Tnode *&t0, Tnode *&t1, long long l, long long r) { if(t == NULL)t = new Tnode; if(l == r) { t -> val = gcd(getvalue(t0), getvalue(t1)); return; } long long mid = (l + r)/2; if(updpos <= mid) { if(t1 != NULL)t1 = t1 -> l; if(t0 != NULL)t0 = t0 -> l; Merge(t ->l, t0, t1, l, mid); } else { if(t1 != NULL)t1 = t1 -> r; if(t0 != NULL)t0 = t0 -> r; Merge(t -> r, t0, t1, mid+1, r); } t -> val = gcd(getvalue(t0), getvalue(t1)); } void Update(Tree *t, long long l, long long r) { if(t == NULL)t = new Tree(); if(l == r) { upd(t -> node, 0, c-1); return; } long long mid = (l + r)/2; if(updPos <= mid)Update(t -> l, l, mid); else Update(t -> r, mid+1, r); } void init(long long R, long long C) { r = R; c = C; } void update(long long P, long long Q, long long K) { updPos = P; updpos = Q; updvalue = K; Update(root, 0, r-1); } long long calculate(long long P, long long Q, long long U, long long V) { qL = P; qR = U; ql = Q; qr = V; long long ans = Query(root, 0, r-1); return ans; }

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

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