Submission #56821

#TimeUsernameProblemLanguageResultExecution timeMemory
56821hamzqq9Game (IOI13_game)C++14
10 / 100
13086 ms2984 KiB
#include "game.h" #include<bits/stdc++.h> using namespace std; #define ll long long #define MAXIMUM 63*200005 long long gcd2(long long X, long long Y) { if(X<Y) swap(X,Y); long long tmp; while (X != Y && Y != 0) { tmp = X; X = Y; Y = tmp % Y; } return X; } struct SEG { int U,D,L,R; ll GCD; } S[MAXIMUM]; int total=1; int C,R; #define CLASSIC ux,uy,dx,dy #define GOUP S[node].U,bx,by,(bx+sx)/2,(by+sy)/2,CLASSIC #define GODO S[node].D,bx,(by+sy)/2+1,(bx+sx)/2,sy,CLASSIC #define GOLE S[node].L,(bx+sx)/2+1,by,sx,(by+sy)/2,CLASSIC #define GORI S[node].R,(bx+sx)/2+1,(by+sy)/2+1,sx,sy,CLASSIC #define SPLE S[node].L,bx,by,sx,(by+sy)/2,CLASSIC #define SPRI S[node].R,bx,(by+sy)/2+1,sx,sy,CLASSIC #define SPUP S[node].U,bx,by,(bx+sx)/2,sy,CLASSIC #define SPDO S[node].D,(bx+sx)/2+1,by,sx,sy,CLASSIC #define INSIDE bx>=ux && by>=uy && sx<=dx && sy<=dy #define OUTSIDE sx<ux || sy<uy || bx>dx || by>dy #define HO (by<sy) #define VE (bx<sx) void up(int node,int bx,int by,int sx,int sy,int ux,int uy,int dx,int dy,ll val) { //printf("NODE--> %d BX--> %d BY-->%d SX-->%d SY-->%d\n",node,bx,by,sx,sy); if(OUTSIDE) return ; if(INSIDE) { // printf("NODE-->%d\n",node); S[node].GCD=val; return ; } if(!S[node].U && VE) { total++; S[node].U=total; } if(!S[node].D && VE) { total++; S[node].D=total; } if(!S[node].L && HO) { total++; S[node].L=total; } if(!S[node].R && HO) { total++; S[node].R=total; } if(!VE) { up(SPLE,val); up(SPRI,val); S[node].GCD=gcd2(S[S[node].L].GCD,S[S[node].R].GCD); } else if(!HO) { up(SPUP,val); up(SPDO,val); S[node].GCD=gcd2(S[S[node].U].GCD,S[S[node].D].GCD); } else { up(GOLE,val); up(GORI,val); up(GOUP,val); up(GODO,val); S[node].GCD=gcd2(gcd2(S[S[node].L].GCD,S[S[node].R].GCD),gcd2(S[S[node].U].GCD,S[S[node].D].GCD)); } } ll flag; void get(int node,int bx,int by,int sx,int sy,int ux,int uy,int dx,int dy) { if(OUTSIDE || !node) return ; if(INSIDE) { flag=__gcd(flag,S[node].GCD); } if(!VE) { get(SPLE),get(SPRI); return ; } if(!HO) { get(SPUP),get(SPDO); return ; } get(GOUP),get(GODO),get(GOLE),get(GORI); } void init(int R, int C) { ::R=R; ::C=C; S[1].GCD=S[1].U=S[1].D=S[1].L=S[1].R=0; } void update(int P, int Q, long long K) { up(1,0,0,R-1,C-1,P,Q,P,Q,K); // printf("%lld\n\n",S[1].GCD); } long long calculate(int P, int Q, int U, int V) { flag=0; get(1,0,0,R-1,C-1,P,Q,U,V); return flag; } /* #include <stdio.h> #include <stdlib.h> #include "game.h" #define fail(s, x...) do { \ fprintf(stderr, s "\n", ## x); \ exit(1); \ } while(0) #define MAX_SIZE 1000000000 #define MAX_N 272000 int main() { int R, C, N; int P, Q, U, V; long long K; int i, type; int res; FILE *f = fopen("game.in", "r"); if (!f) fail("Failed to open input file."); res = fscanf(f, "%d", &R); res = fscanf(f, "%d", &C); res = fscanf(f, "%d", &N); init(R, C); for (i = 0; i < N; i++) { res = fscanf(f, "%d", &type); if (type == 1) { res = fscanf(f, "%d%d%lld", &P, &Q, &K); update(P, Q, K); } else if (type == 2) { res = fscanf(f, "%d%d%d%d", &P, &Q, &U, &V); printf("QUERY----> %lld\n", calculate(P, Q, U, V)); } else fail("Invalid action type in input file."); } fclose(f); return 0; } */

Compilation message (stderr)

grader.c: In function 'int main()':
grader.c:18:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
  int res;
      ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...