#include "game.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll r, c;
vector <ll> lqry;
struct node
{
ll val, North, South, West, East;
node *NE, *NW, *SE, *SW;
node(ll a, ll b, ll c, ll d)
{
North = a, South = b, West = c, East = d;
val = 0;
}
node() {}
};
node *last = new node(-1, -1, -1, -1);
void lastify(node *th)
{
th->NE = last;
th->NW = last;
th->SE = last;
th->SW = last;
}
node *rt = new node();
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;
}
ll mgcd(ll a, ll b, ll c, ll d)
{
a = gcd2(a, b);
a = gcd2(a, c);
a = gcd2(a, d);
return a;
}
void update_seg(node* cur, ll row, ll col, ll val)
{
//cout<<cur->North<<" "<<cur->South<<" "<<cur->West<<" "<<cur->East<<endl;
if(cur -> North > row || cur -> South < row)
return;
if(cur -> West > col || cur -> East < col)
return;
if(cur -> North == cur -> South && cur -> East == cur -> West)
{
cur->val = val;
return;
}
ll mrow = (cur -> North + cur -> South)/2;
ll mcol = (cur -> East + cur -> West)/2;
if(row <= mrow && col <= mcol)
{
if(cur -> NW == last)
{
cur -> NW = new node(cur->North, mrow, cur -> West, mcol);
lastify(cur->NW);
}
update_seg(cur->NW, row, col, val);
}
if(row <= mrow && col > mcol)
{
if(cur -> NE == last)
{
cur -> NE = new node(cur->North, mrow, mcol+1, cur->East);
lastify(cur->NE);
}
update_seg(cur->NE, row, col, val);
}
if(row > mrow && col <= mcol)
{
if(cur -> SW == last)
{
cur -> SW = new node(mrow+1, cur->South, cur -> West, mcol);
lastify(cur->SW);
}
update_seg(cur->SW, row, col, val);
}
if(row > mrow && col > mcol)
{
if(cur -> SE == last)
{
cur -> SE = new node(mrow+1, cur->South, mcol+1, cur->East);
lastify(cur->SE);
}
update_seg(cur->SE, row, col, val);
}
cur->val = mgcd((cur->NE)->val, (cur->NW)->val, (cur->SE)->val, (cur->SW)->val);
//cout<<cur->North<<" "<<cur->South<<" "<<cur->West<<" "<<cur->East<<" "<<cur->val<<endl;
}
void query_seg(node *cur, ll top, ll bottom, ll left, ll right)
{
if(cur->North > bottom || cur -> South < top)
return;
if(cur -> East < left || cur -> West > right)
return;
if(cur->East <= right && cur->West >= left && cur->North >= top && cur->South <= bottom)
{
lqry.push_back(cur->val);
return;
}
query_seg(cur->NE, top, bottom, left, right);
query_seg(cur->NW, top, bottom, left, right);
query_seg(cur->SE, top, bottom, left, right);
query_seg(cur->SW, top, bottom, left, right);
}
void init(int R, int C) {
/* ... */
r = R;
c = C;
rt -> North = 0;
rt -> South = r-1;
rt -> West = 0;
rt -> East = c-1;
lastify(rt);
}
void update(int P, int Q, long long K) {
update_seg(rt, P, Q, K);
}
long long calculate(int P, int Q, int U, int V) {
/* ... */
lqry.clear();
lqry.push_back(0);
query_seg(rt, P, U, Q, V);
sort(lqry.begin(), lqry.end());
ll ind = 0;
for(int i = 0; i<int(lqry.size()); i++)
{
if(lqry[i] != 0)
{
ind = i;
for(int j = i; j<int(lqry.size()); j++)
{
lqry[i] = gcd2(lqry[i], lqry[j]);
}
break;
}
}
return lqry[ind];
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
204 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 |
292 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 |
204 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 |
0 ms |
204 KB |
Output is correct |
3 |
Correct |
0 ms |
204 KB |
Output is correct |
4 |
Correct |
1427 ms |
14636 KB |
Output is correct |
5 |
Correct |
1020 ms |
14468 KB |
Output is correct |
6 |
Correct |
803 ms |
12024 KB |
Output is correct |
7 |
Correct |
1006 ms |
11780 KB |
Output is correct |
8 |
Correct |
537 ms |
9480 KB |
Output is correct |
9 |
Correct |
920 ms |
11868 KB |
Output is correct |
10 |
Correct |
871 ms |
11532 KB |
Output is correct |
11 |
Correct |
0 ms |
204 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
204 KB |
Output is correct |
4 |
Correct |
0 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 |
204 KB |
Output is correct |
10 |
Correct |
1 ms |
204 KB |
Output is correct |
11 |
Correct |
1 ms |
204 KB |
Output is correct |
12 |
Correct |
7248 ms |
11716 KB |
Output is correct |
13 |
Execution timed out |
13064 ms |
4264 KB |
Time limit exceeded |
14 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
204 KB |
Output is correct |
4 |
Correct |
0 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 |
292 KB |
Output is correct |
10 |
Correct |
1 ms |
204 KB |
Output is correct |
11 |
Correct |
1 ms |
204 KB |
Output is correct |
12 |
Correct |
1449 ms |
14632 KB |
Output is correct |
13 |
Correct |
1048 ms |
14460 KB |
Output is correct |
14 |
Correct |
881 ms |
12008 KB |
Output is correct |
15 |
Correct |
1016 ms |
11972 KB |
Output is correct |
16 |
Correct |
533 ms |
9540 KB |
Output is correct |
17 |
Correct |
944 ms |
11956 KB |
Output is correct |
18 |
Correct |
847 ms |
11544 KB |
Output is correct |
19 |
Correct |
7401 ms |
11716 KB |
Output is correct |
20 |
Execution timed out |
13039 ms |
4132 KB |
Time limit exceeded |
21 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
204 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 |
300 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 |
204 KB |
Output is correct |
10 |
Correct |
1 ms |
204 KB |
Output is correct |
11 |
Correct |
1 ms |
204 KB |
Output is correct |
12 |
Correct |
1446 ms |
14528 KB |
Output is correct |
13 |
Correct |
1049 ms |
14404 KB |
Output is correct |
14 |
Correct |
829 ms |
12072 KB |
Output is correct |
15 |
Correct |
1104 ms |
11800 KB |
Output is correct |
16 |
Correct |
572 ms |
9444 KB |
Output is correct |
17 |
Correct |
948 ms |
11872 KB |
Output is correct |
18 |
Correct |
886 ms |
11472 KB |
Output is correct |
19 |
Correct |
7436 ms |
11680 KB |
Output is correct |
20 |
Execution timed out |
13095 ms |
4088 KB |
Time limit exceeded |
21 |
Halted |
0 ms |
0 KB |
- |