#include "game.h"
#include <stdio.h>
#include <stdlib.h>
#define lld long long
long long gcd2(long long X, long long Y) {
long long tmp;
if(X == 0) return Y;
if(Y == 0) return X;
while (X != Y && Y != 0) {
tmp = X;
X = Y;
Y = tmp % Y;
}
return X;
}
struct datay{
lld value;
datay *left,*right;
datay(){
value = 0;
left = right = NULL;
}
};
struct datax{
datax *left,*right;
datay *yroot;
datax(){
left = right = NULL;
}
}*xroot;
int R,C;
int nr,nc;
void init(int iR, int iC) {
R = iR; C = iC;
for(nr = 1; nr < R; nr *= 2);
for(nc = 1; nc < C; nc *= 2);
xroot = new datax();
xroot -> yroot = new datay();
}
lld ans,value;
int findx,findy;
void yupdate1(datay *node,int left,int right){
if(left == right){
node -> value = value;
return;
}
if(left <= findy && findy <= ((left+right)/2)){
if(node -> left == NULL) node -> left = new datay();
yupdate1(node->left,left,((left+right)/2));
}
if(((left+right)/2)+1 <= findy && findy <= right){
if(node -> right == NULL) node -> right = new datay();
yupdate1(node->right,((left+right)/2)+1,right);
}
if(node->left == NULL){
if(node->right == NULL) node->value = 0;
else node->value = (node->right)->value;
}else{
if(node->right == NULL) node->value = (node->left)->value;
else node->value = gcd2((node->left)->value,(node->right)->value);
}
}
void yclear(datay *node,int left,int right){
node -> value = 0;
if(left == right) return;
if(left <= findy && findy <= ((left+right)/2)){
if(node -> left == NULL) node -> left = new datay();
yclear(node->left,left,((left+right)/2));
}
if(((left+right)/2)+1 <= findy && findy <= right){
if(node -> right == NULL) node -> right = new datay();
yclear(node->right,((left+right)/2)+1,right);
}
}
void yupdate2(datay *node,datay *node2,int left,int right){
node -> value = gcd2(node->value,node2->value);
if(left == right) return;
if(left <= findy && findy <= ((left+right)/2) && node2->left != NULL) yupdate2(node->left,node2->left,left,((left+right)/2));
if(((left+right)/2)+1 <= findy && findy <= right && node2->right != NULL) yupdate2(node->right,node2->right,((left+right)/2)+1,right);
}
void xupdate(datax *node,int left,int right){
if(node -> yroot == NULL) node -> yroot = new datay();
if(left == right){
yupdate1(node -> yroot,1,nc);
return;
}
if(left <= findx && findx <= ((left+right)/2)){
if(node -> left == NULL) node -> left = new datax();
xupdate(node->left,left,((left+right)/2));
}
if(((left+right)/2)+1 <= findx && findx <= right){
if(node -> right == NULL) node -> right = new datax();
xupdate(node->right,((left+right)/2)+1,right);
}
yclear(node->yroot,1,nc);
if(node -> left != NULL) yupdate2(node->yroot,(node->left)->yroot,1,nc);
if(node ->right != NULL) yupdate2(node->yroot,(node->right)->yroot,1,nc);
}
void update(int iP, int iQ, long long K) {
int P,Q;
P = iP; Q = iQ;
P++; Q++;
findx = P;
findy = Q;
value = K;
xupdate(xroot,1,nr);
}
int sx,ex,sy,ey;
void ycalc(datay *node,int left,int right){
if(sy <= left && right <= ey){
ans = gcd2(ans,node->value);
return;
}
if(!((ey < left) || (((left+right)/2) < sy)) && node->left != NULL) ycalc(node->left,left,((left+right)/2));
if(!((ey < ((left+right)/2)+1) || (right < sy)) && node->right != NULL) ycalc(node->right,((left+right)/2)+1,right);
}
void xcalc(datax *node,int left,int right){
if(sx <= left && right <= ex){
ycalc(node->yroot,1,nc);
return;
}
if(!(((ex < left) || (((left+right)/2)) < sx)) && node -> left != NULL) xcalc(node->left,left,((left+right)/2));
if(!((ex < ((left+right)/2)+1) || (right < sx)) && node -> right != NULL) xcalc(node->right,((left+right)/2)+1,right);
}
long long calculate(int iP, int iQ, int iU, int iV) {
int P,Q,U,V;
P = iP; Q = iQ; U = iU; V = iV;
P++; Q++; U++; V++;
ans = 0;
sx = P; ex = U;
sy = Q; ey = V;
xcalc(xroot,1,nr);
return ans;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
1212 KB |
Output is correct |
2 |
Correct |
0 ms |
1212 KB |
Output is correct |
3 |
Correct |
0 ms |
1212 KB |
Output is correct |
4 |
Correct |
0 ms |
1212 KB |
Output is correct |
5 |
Correct |
0 ms |
1212 KB |
Output is correct |
6 |
Correct |
0 ms |
1212 KB |
Output is correct |
7 |
Correct |
0 ms |
1212 KB |
Output is correct |
8 |
Correct |
0 ms |
1212 KB |
Output is correct |
9 |
Correct |
0 ms |
1212 KB |
Output is correct |
10 |
Correct |
0 ms |
1212 KB |
Output is correct |
11 |
Correct |
0 ms |
1212 KB |
Output is correct |
12 |
Correct |
0 ms |
1212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
1212 KB |
Output is correct |
2 |
Correct |
0 ms |
1212 KB |
Output is correct |
3 |
Correct |
0 ms |
1212 KB |
Output is correct |
4 |
Correct |
672 ms |
10320 KB |
Output is correct |
5 |
Correct |
427 ms |
10320 KB |
Output is correct |
6 |
Correct |
591 ms |
10584 KB |
Output is correct |
7 |
Correct |
668 ms |
10584 KB |
Output is correct |
8 |
Correct |
442 ms |
6492 KB |
Output is correct |
9 |
Correct |
628 ms |
10584 KB |
Output is correct |
10 |
Correct |
530 ms |
10584 KB |
Output is correct |
11 |
Correct |
0 ms |
1212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
1212 KB |
Output is correct |
2 |
Correct |
0 ms |
1212 KB |
Output is correct |
3 |
Correct |
0 ms |
1212 KB |
Output is correct |
4 |
Correct |
0 ms |
1212 KB |
Output is correct |
5 |
Correct |
0 ms |
1212 KB |
Output is correct |
6 |
Correct |
1 ms |
1212 KB |
Output is correct |
7 |
Correct |
0 ms |
1212 KB |
Output is correct |
8 |
Correct |
0 ms |
1212 KB |
Output is correct |
9 |
Correct |
0 ms |
1212 KB |
Output is correct |
10 |
Correct |
0 ms |
1212 KB |
Output is correct |
11 |
Correct |
0 ms |
1212 KB |
Output is correct |
12 |
Correct |
1481 ms |
12696 KB |
Output is correct |
13 |
Correct |
2232 ms |
6360 KB |
Output is correct |
14 |
Correct |
301 ms |
1344 KB |
Output is correct |
15 |
Correct |
2534 ms |
9000 KB |
Output is correct |
16 |
Correct |
435 ms |
18372 KB |
Output is correct |
17 |
Correct |
954 ms |
10980 KB |
Output is correct |
18 |
Correct |
1544 ms |
18372 KB |
Output is correct |
19 |
Correct |
1323 ms |
18372 KB |
Output is correct |
20 |
Correct |
1144 ms |
18372 KB |
Output is correct |
21 |
Correct |
0 ms |
1212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
1212 KB |
Output is correct |
2 |
Correct |
0 ms |
1212 KB |
Output is correct |
3 |
Correct |
0 ms |
1212 KB |
Output is correct |
4 |
Correct |
0 ms |
1212 KB |
Output is correct |
5 |
Correct |
0 ms |
1212 KB |
Output is correct |
6 |
Correct |
0 ms |
1212 KB |
Output is correct |
7 |
Correct |
0 ms |
1212 KB |
Output is correct |
8 |
Correct |
0 ms |
1212 KB |
Output is correct |
9 |
Correct |
0 ms |
1212 KB |
Output is correct |
10 |
Correct |
0 ms |
1212 KB |
Output is correct |
11 |
Correct |
0 ms |
1212 KB |
Output is correct |
12 |
Correct |
696 ms |
10320 KB |
Output is correct |
13 |
Correct |
397 ms |
10320 KB |
Output is correct |
14 |
Correct |
572 ms |
10584 KB |
Output is correct |
15 |
Correct |
672 ms |
10584 KB |
Output is correct |
16 |
Correct |
465 ms |
6492 KB |
Output is correct |
17 |
Correct |
625 ms |
10584 KB |
Output is correct |
18 |
Correct |
515 ms |
10584 KB |
Output is correct |
19 |
Correct |
1522 ms |
12696 KB |
Output is correct |
20 |
Correct |
2253 ms |
6360 KB |
Output is correct |
21 |
Correct |
338 ms |
1344 KB |
Output is correct |
22 |
Correct |
2532 ms |
9000 KB |
Output is correct |
23 |
Correct |
436 ms |
18372 KB |
Output is correct |
24 |
Correct |
950 ms |
10980 KB |
Output is correct |
25 |
Correct |
1537 ms |
18372 KB |
Output is correct |
26 |
Correct |
1351 ms |
18372 KB |
Output is correct |
27 |
Correct |
1162 ms |
18372 KB |
Output is correct |
28 |
Correct |
1068 ms |
251880 KB |
Output is correct |
29 |
Memory limit exceeded |
2275 ms |
256000 KB |
Memory limit exceeded |
30 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
1212 KB |
Output is correct |
2 |
Correct |
0 ms |
1212 KB |
Output is correct |
3 |
Correct |
0 ms |
1212 KB |
Output is correct |
4 |
Correct |
0 ms |
1212 KB |
Output is correct |
5 |
Correct |
0 ms |
1212 KB |
Output is correct |
6 |
Correct |
0 ms |
1212 KB |
Output is correct |
7 |
Correct |
0 ms |
1212 KB |
Output is correct |
8 |
Correct |
0 ms |
1212 KB |
Output is correct |
9 |
Correct |
0 ms |
1212 KB |
Output is correct |
10 |
Correct |
0 ms |
1212 KB |
Output is correct |
11 |
Correct |
0 ms |
1212 KB |
Output is correct |
12 |
Correct |
695 ms |
10320 KB |
Output is correct |
13 |
Correct |
406 ms |
10320 KB |
Output is correct |
14 |
Correct |
606 ms |
10584 KB |
Output is correct |
15 |
Correct |
663 ms |
10584 KB |
Output is correct |
16 |
Correct |
409 ms |
6492 KB |
Output is correct |
17 |
Correct |
657 ms |
10584 KB |
Output is correct |
18 |
Correct |
567 ms |
10584 KB |
Output is correct |
19 |
Correct |
1516 ms |
12696 KB |
Output is correct |
20 |
Correct |
2262 ms |
6360 KB |
Output is correct |
21 |
Correct |
325 ms |
1344 KB |
Output is correct |
22 |
Correct |
2557 ms |
9000 KB |
Output is correct |
23 |
Correct |
429 ms |
18372 KB |
Output is correct |
24 |
Correct |
988 ms |
10980 KB |
Output is correct |
25 |
Correct |
1571 ms |
18372 KB |
Output is correct |
26 |
Correct |
1442 ms |
18372 KB |
Output is correct |
27 |
Correct |
1178 ms |
18372 KB |
Output is correct |
28 |
Correct |
1081 ms |
251880 KB |
Output is correct |
29 |
Memory limit exceeded |
2263 ms |
256000 KB |
Memory limit exceeded |
30 |
Halted |
0 ms |
0 KB |
- |