Submission #426105

#TimeUsernameProblemLanguageResultExecution timeMemory
426105Bill_00Game (IOI13_game)C++14
37 / 100
13109 ms196252 KiB
#include "game.h"
#include <bits/stdc++.h>
typedef long long ll;
const ll value=3000000000;
using namespace std;
ll x,y,k,x_,y_;
unordered_map<ll,ll>t;
long long gcd2(long long X, long long Y) {
    if(Y>X) swap(X,Y);
    long long tmp;
    while (X != Y && Y != 0) {
        tmp = X;
        X = Y;
        Y = tmp % Y;
    }
    return X;
}
void updateY(ll vx, ll lx, ll rx, ll vy, ll ly, ll ry) {
    if (ly == ry) {
        if (lx == rx){
            t[vx*value+vy] = k;
        }
        else{
            t[vx*value+vy] = gcd2(t[vx*2*value+vy],t[(vx*2+1)*value+vy]);
            // cout << t[vx*2*value+vy] << '\n';
        }
    } else {
        ll my = (ly + ry) / 2;
        if(my>=y) updateY(vx, lx, rx, vy*2, ly, my);
        else updateY(vx, lx, rx, vy*2+1, my+1, ry);
        t[vx*value+vy] = gcd2(t[vx*value+vy*2],t[vx*value+vy*2+1]);
    }
    // cout << t[vx*value+vy] << ' ' << lx << ' ' << rx << ' ' << ly << ' ' << ry << '\n';
}

void updateX(ll vx, ll lx, ll rx) {
    if (lx != rx) {
        ll mx = (lx + rx) / 2;
        if(mx>=x) updateX(vx*2, lx, mx);
       	else updateX(vx*2+1, mx+1, rx);
    }
    updateY(vx, lx, rx, 1, 0, 1000000000);
}
void init(int R, int C) {
    /* ... */
}
void update(int P, int Q, long long K) {
    x=P;
    y=Q;
    k=K;
   	updateX(1,0,1000000000);
}
ll queryY(ll idx,ll L,ll R,ll idy,ll l,ll r) {
    if(r<y || y_<l) return 0;
    if(y<=l && r<=y_){
    	return t[idx*value+idy];	
    } 
    ll m=l+r>>1;
    return gcd2(queryY(idx,L,R,idy*2,l,m),queryY(idx,L,R,idy*2+1,m+1,r));
}

ll queryX(ll id,ll l,ll r) {
   if(r<x || x_<l) return 0;
   if(x<=l && r<=x_) return queryY(id,l,r,1,0,1000000000);
   ll m=l+r>>1;
   return gcd2(queryX(id*2,l,m),queryX(id*2+1,m+1,r));
}
long long calculate(int P, int Q, int U, int V) {
    /* ... */
    x=P;
    y=Q;
    x_=U;
    y_=V;
    return queryX(1,0,1000000000);
}

Compilation message (stderr)

game.cpp: In function 'll queryY(ll, ll, ll, ll, ll, ll)':
game.cpp:58:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   58 |     ll m=l+r>>1;
      |          ~^~
game.cpp: In function 'll queryX(ll, ll, ll)':
game.cpp:65:10: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   65 |    ll m=l+r>>1;
      |         ~^~
#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...