Submission #729720

#TimeUsernameProblemLanguageResultExecution timeMemory
729720Jean7Game (IOI13_game)C++14
27 / 100
729 ms28144 KiB
#include "game.h" #include <bits/stdc++.h> #define le (node<<1) #define ri (node<<1|1) #define mid ((l+r)>>1) using namespace std ; 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; } const int N = 1e5+5 ; int n , m ; struct Segment_Tree { long long tree[N<<2] ; void build ( int node , int l , int r ) { if ( l == r ) { tree[node] = 0 ; } else { build ( le , l , mid ) ; build ( ri , mid+1 , r ) ; tree[node] = gcd2 ( tree[le] , tree[ri] ) ; } } void update ( int node , int l , int r , int i , long long v ) { if ( l == r ) { tree[node] = v ; } else { if ( i <= mid ) { update ( le , l , mid , i , v ) ; } else { update ( ri , mid+1 , r , i , v ) ; } tree[node] = gcd2 ( tree[le] , tree[ri] ) ; } } long long query ( int node , int l , int r , int x , int y ) { if ( l > r || l > y || r < x ) { return 0ll ; } if ( l >= x && r <= y ) { return tree[node] ; } return gcd2 ( query ( le , l , mid , x , y ) , query ( ri , mid+1 , r , x , y ) ) ; } } seg[11] ; void init(int R, int C) { n = R ; m = C ; for ( int i = 1 ; i <= n ; i++ ) { seg[i].build ( 1 , 1 , m ) ; } } void update(int P, int Q, long long K) { P++ ; Q++ ; seg[P].update ( 1 , 1 , m , Q , K ) ; } long long calculate(int P, int Q, int U, int V) { long long ret = 0 ; P++ ; Q++ ; U++ ; V++ ; for ( int i = P ; i <= U ; i++ ) { ret = gcd2 ( ret , seg[i].query ( 1 , 1 , m , Q , V ) ) ; } return ret ; }
#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...