제출 #898160

#제출 시각아이디문제언어결과실행 시간메모리
898160Faisal_Saqib게임 (IOI13_game)C++17
컴파일 에러
0 ms0 KiB
// #include "game.h"
#include <iostream>
#include <numeric>
using namespace std;
const int N=1e9;
// int N;
struct SegmentTree
{
	long long gdc=0;
	int s,e;
	SegmentTree* next[2];
	SegmentTree(int l,int r)
	{
		s=l;
		e=r;
		next[0]=next[1]=NULL;
	}
	long long get(int& l,int& r)
	{
		if(e<l or r<s)
			return 0;
		if(l<=s and e<=r)
			return gdc;
		long long ans=0;
		if(next[0]!=NULL)
			ans=gcd(ans,next[0]->get(l,r));
		if(next[1]!=NULL)
			ans=gcd(ans,next[1]->get(l,r));
		return ans;
	}
	void Update(int& l,long long& val)
	{
		if(s==e)
		{
			gdc=val;
			return;
		}
		if(l<=((s+e)/2))
		{
			if(next[0]==NULL)
				next[0]=new SegmentTree(s,(s+e)/2);
			next[0]->Update(l,val);
		}
		else
		{
			if(next[1]==NULL)
				next[1]=new SegmentTree(1+((s+e)/2),e);
			next[1]->Update(l,val);
		}
		gdc=0;
		if(next[0]!=NULL)
			gdc=gcd(next[0]->gdc,gdc);
		if(next[1]!=NULL)
			gdc=gcd(next[1]->gdc,gdc);
	}
};
struct SegmentTree2D
{
	int s,e;
	SegmentTree* heavy;
	SegmentTree2D* next[2];
	SegmentTree2D(int l,int r)
	{
		s=l;
		e=r;
		heavy=new SegmentTree(0,N-1);
		next[0]=next[1]=NULL;
	}
	long long get(int& sx,int& ex,int& sy,int& ey)
	{
		if(ex<s or e<sx)
			return 0;
		if(sx<=s and e<=ex)
			return heavy->get(sy,ey);
		long long ans=0;
		if(next[0]!=NULL)
			ans=gcd(ans,next[0]->get(sx,ex,sy,ey));
		if(next[1]!=NULL)
			ans=gcd(ans,next[1]->get(sx,ex,sy,ey));
		return ans;
	}
	void Update(int& l,int& r,long long& val)
	{
		if(s==e)
		{
			heavy->Update(r,val);
			return;
		}
		long long gdc=0;
		if(l<=((s+e)/2))
		{
			if(next[0]==NULL)
				next[0]=new SegmentTree2D(s,(s+e)/2);
			next[0]->Update(l,r,val);
		}
		else
		{
			if(next[1]==NULL)
				next[1]=new SegmentTree2D(1+((s+e)/2),e);
			next[1]->Update(l,r,val);
		}
		if(next[0]!=NULL)
			gdc=gcd(gdc,next[0]->heavy->get(r,r));
		if(next[1]!=NULL)
			gdc=gcd(gdc,next[1]->heavy->get(r,r));
		heavy->Update(r,gdc);
	}
};
SegmentTree2D* st;
void init(int r, int c)
{
	st=new SegmentTree2D(0,N-1);
}
void update(int p, int q, long long k)
{
	st->Update(p,q,k);
}
long long calculate(int P, int Q, int U, int V)
{
	return st->get(P,U,Q,V);
}

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

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