답안 #400311

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
400311 2021-05-07T20:44:32 Z Jasiekstrz 게임 (IOI13_game) C++17
100 / 100
6588 ms 245156 KB
#include<bits/stdc++.h>
#include "game.h"
using namespace std;
const int D=4;
long long gcd2(long long X,long long Y) 
{
    long long tmp;
    while(X!=Y && Y!=0)
	{
        tmp=X;
        X=Y;
        Y=tmp%Y;
    }
    return X;
}
int rr,cc;
struct TreeC
{
	long long val;
	TreeC* son[D];
	TreeC()
	{
		val=0;
		for(int i=0;i<D;i++)
			son[i]=NULL;
	}
	~TreeC()
	{
		for(int i=0;i<D;i++)
			delete son[i];
	}
	void add(int l,int r,int x,long long c)
	{
		if(l==r)
		{
			val=c;
			return;
		}
		val=0;
		int d=(r-l+1)/D;
		for(int i=0,j=l;i<D;i++,j+=d)
		{
			if(j<=x && x<j+d)
			{
				if(son[i]==NULL)
					son[i]=new TreeC;
				son[i]->add(j,j+d-1,x,c);
			}
			val=gcd2(val, (son[i]==NULL ? 0:son[i]->val));
		}
		return;
	}
	long long read(int l,int r,int ls,int rs)
	{
		if(rs<l || r<ls)
			return 0;
		if(ls<=l && r<=rs)
			return val;
		long long ans=0;
		int d=(r-l+1)/D;
		for(int i=0,j=l;i<D;i++,j+=d)
			ans=gcd2(ans, (son[i]==NULL ? 0:son[i]->read(j,j+d-1,ls,rs)));
		return ans;
	}
};
struct TreeR
{
	TreeC *t;
	TreeR* son[D];
	TreeR()
	{
		t=new TreeC;
		for(int i=0;i<D;i++)
			son[i]=NULL;
	}
	~TreeR()
	{
		delete t;
		for(int i=0;i<D;i++)
			delete son[i];
	}
	void add(int l,int r,int x,int y,long long c)
	{
		if(l==r)
		{
			t->add(0,cc,y,c);
			return;
		}
		long long tmp=0;
		int d=(r-l+1)/D;
		for(int i=0,j=l;i<D;i++,j+=d)
		{
			if(j<=x && x<j+d)
			{
				if(son[i]==NULL)
					son[i]=new TreeR;
				son[i]->add(j,j+d-1,x,y,c);
			}
			tmp=gcd2(tmp, (son[i]==NULL ? 0:son[i]->t->read(0,cc,y,y)));
		}
		t->add(0,cc,y,tmp);
		return;
	}
	long long read(int l,int r,int ls,int rs,int ly,int ry)
	{
		if(rs<l || r<ls)
			return 0;
		if(ls<=l && r<=rs)
			return t->read(0,cc,ly,ry);
		long long ans=0;
		int d=(r-l+1)/D;
		for(int i=0,j=l;i<D;i++,j+=d)
			ans=gcd2(ans, (son[i]==NULL ? 0:son[i]->read(j,j+d-1,ls,rs,ly,ry)));
		return ans;
	}
};
TreeR* root;
void init(int R,int C)
{
	for(rr=1;rr<R;rr*=D);
	rr--;
	for(cc=1;cc<C;cc*=D);
	cc--;
	root=new TreeR;
	return;
}
void update(int P,int Q,long long K)
{
	root->add(0,rr,P,Q,K);
	return;
}
long long calculate(int P,int Q,int U,int V)
{
	return root->read(0,rr,P,U,Q,V);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 332 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
12 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 300 KB Output is correct
4 Correct 616 ms 8772 KB Output is correct
5 Correct 414 ms 9136 KB Output is correct
6 Correct 611 ms 5956 KB Output is correct
7 Correct 671 ms 5700 KB Output is correct
8 Correct 458 ms 4548 KB Output is correct
9 Correct 660 ms 5700 KB Output is correct
10 Correct 584 ms 5348 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 332 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 208 KB Output is correct
12 Correct 1082 ms 9624 KB Output is correct
13 Correct 2011 ms 3544 KB Output is correct
14 Correct 345 ms 840 KB Output is correct
15 Correct 2523 ms 4876 KB Output is correct
16 Correct 390 ms 8932 KB Output is correct
17 Correct 1088 ms 6224 KB Output is correct
18 Correct 1818 ms 9272 KB Output is correct
19 Correct 1641 ms 9392 KB Output is correct
20 Correct 1624 ms 8756 KB Output is correct
21 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 2 ms 332 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 332 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
12 Correct 641 ms 8772 KB Output is correct
13 Correct 462 ms 9064 KB Output is correct
14 Correct 678 ms 5876 KB Output is correct
15 Correct 698 ms 5652 KB Output is correct
16 Correct 466 ms 4404 KB Output is correct
17 Correct 693 ms 5768 KB Output is correct
18 Correct 650 ms 5388 KB Output is correct
19 Correct 1095 ms 9696 KB Output is correct
20 Correct 2033 ms 3652 KB Output is correct
21 Correct 382 ms 1268 KB Output is correct
22 Correct 2574 ms 5220 KB Output is correct
23 Correct 404 ms 9260 KB Output is correct
24 Correct 1134 ms 6560 KB Output is correct
25 Correct 1895 ms 9632 KB Output is correct
26 Correct 1529 ms 9776 KB Output is correct
27 Correct 1435 ms 9176 KB Output is correct
28 Correct 795 ms 104244 KB Output is correct
29 Correct 2104 ms 116900 KB Output is correct
30 Correct 5316 ms 83408 KB Output is correct
31 Correct 5340 ms 64696 KB Output is correct
32 Correct 541 ms 3244 KB Output is correct
33 Correct 783 ms 4220 KB Output is correct
34 Correct 1014 ms 113752 KB Output is correct
35 Correct 1442 ms 60224 KB Output is correct
36 Correct 2566 ms 116228 KB Output is correct
37 Correct 2181 ms 116340 KB Output is correct
38 Correct 2127 ms 115792 KB Output is correct
39 Correct 1808 ms 90056 KB Output is correct
40 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 332 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1 ms 332 KB Output is correct
7 Correct 1 ms 204 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 1 ms 204 KB Output is correct
12 Correct 604 ms 10308 KB Output is correct
13 Correct 423 ms 10564 KB Output is correct
14 Correct 606 ms 7376 KB Output is correct
15 Correct 662 ms 7108 KB Output is correct
16 Correct 443 ms 5848 KB Output is correct
17 Correct 649 ms 7236 KB Output is correct
18 Correct 580 ms 6824 KB Output is correct
19 Correct 1062 ms 11204 KB Output is correct
20 Correct 1922 ms 5016 KB Output is correct
21 Correct 337 ms 2396 KB Output is correct
22 Correct 2451 ms 6272 KB Output is correct
23 Correct 401 ms 10400 KB Output is correct
24 Correct 1063 ms 7592 KB Output is correct
25 Correct 1657 ms 10704 KB Output is correct
26 Correct 1433 ms 11040 KB Output is correct
27 Correct 1438 ms 10176 KB Output is correct
28 Correct 730 ms 108236 KB Output is correct
29 Correct 1895 ms 119436 KB Output is correct
30 Correct 5098 ms 83928 KB Output is correct
31 Correct 4724 ms 64792 KB Output is correct
32 Correct 514 ms 3136 KB Output is correct
33 Correct 757 ms 4164 KB Output is correct
34 Correct 1012 ms 113988 KB Output is correct
35 Correct 1383 ms 60276 KB Output is correct
36 Correct 2525 ms 116416 KB Output is correct
37 Correct 2045 ms 116548 KB Output is correct
38 Correct 2074 ms 116036 KB Output is correct
39 Correct 1062 ms 219188 KB Output is correct
40 Correct 2926 ms 245156 KB Output is correct
41 Correct 6588 ms 173708 KB Output is correct
42 Correct 6296 ms 133184 KB Output is correct
43 Correct 1627 ms 243268 KB Output is correct
44 Correct 674 ms 3512 KB Output is correct
45 Correct 1738 ms 89212 KB Output is correct
46 Correct 3358 ms 243772 KB Output is correct
47 Correct 3323 ms 243708 KB Output is correct
48 Correct 3268 ms 243000 KB Output is correct
49 Correct 1 ms 204 KB Output is correct