Submission #258176

# Submission time Handle Problem Language Result Execution time Memory
258176 2020-08-05T13:41:51 Z eohomegrownapps Game (IOI13_game) C++14
Compilation error
0 ms 0 KB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll gcd2(ll X, ll Y) {
    ll tmp;
    while (X != Y && Y != 0) {
        tmp = X;
        X = Y;
        Y = tmp % Y;
    }
    return X;
}

ll n;

struct NodeY{
    ll s,e,m;
    ll v;
    NodeY *l = NULL;
    NodeY *r = NULL;
    NodeY(ll _s, ll _e){
        s=_s;e=_e;
        m=(s+e)/2;
        v=0;
    }

    void makeL(){
        if (l!=NULL){
            return;
        }
        l = new NodeY(s,m);
    }

    void makeR(){
        if (r!=NULL){
            return;
        }
        r = new NodeY(m+1,e);
    }

    ll getL(){
        if (l==NULL){
            return 0;
        }
        return l->v; 
    }

    ll getR(){
        if (r==NULL){
            return 0;
        }
        return r->v;
    }

    void update(ll ind, ll val){
        //cout<<"y "<<s<<' '<<e<<'\n';
        //cout<<"u "<<ind<<' '<<val<<'\n';
        if (s==e){
            v=val;
            return;
        }
        if (ind<=m){
            makeL();
            l->update(ind,val);
        } else {
            makeR();
            r->update(ind,val);
        }
        v=gcd2(getL(),getR());
    }

    ll queryL(ll ya, ll yb){
        if (l==NULL){
            return 0;
        }
        return l->query(ya,yb);
    }

    ll queryR(ll ya, ll yb){
        if (r==NULL){
            return 0;
        }
        return r->query(ya,yb);
    }

    ll query(ll ya, ll yb){
        if (s==ya&&e==yb){
            return v;
        }
        if (yb<=m){
            return queryL(ya,yb);
        } else if (m<ya){
            return queryR(ya,yb);
        } else {
            return gcd2(queryL(ya,m),queryR(m+1,yb));
        }
    }
};

struct NodeX{
    ll s,e,m;
    NodeY *v;
    NodeX *l = NULL;
    NodeX *r = NULL;
    NodeX(ll _s, ll _e){
        s=_s;e=_e;
        m=(s+e)/2;
        v=new NodeY(0,n-1);
    }

    void makeL(){
        if (l!=NULL){
            return;
        }
        l = new NodeX(s,m);
    }

    void makeR(){
        if (r!=NULL){
            return;
        }
        r = new NodeX(m+1,e);
    }

    void update(ll indx, ll indy, ll val){
        //cout<<"x "<<s<<' '<<e<<'\n';
        //cout<<"u "<<indx<<' '<<indy<<' '<<val<<'\n';
        if (s==e){
            v->update(indy,val);
            return;
        }
        if (indx<=m){
            makeL();
            l->update(indx,indy,val);
        } else {
            makeR();
            r->update(indx,indy,val);
        }
        v->update(indy,val); //???
    }

    ll queryL(ll xa, ll xb, ll ya, ll yb){
        if (l==NULL){
            return 0;
        }
        return l->query(xa,xb,ya,yb);
    }

    ll queryR(ll xa, ll xb, ll ya, ll yb){
        if (r==NULL){
            return 0;
        }
        return r->query(xa,xb,ya,yb);
    }

    ll query(ll xa, ll xb, ll ya, ll yb){
        if (s==xa&&e==xb){
            return v->query(ya,yb);
        }
        if (xb<=m){
            return queryL(xa,xb,ya,yb);
        } else if (m<xa){
            return queryR(xa,xb,ya,yb);
        } else {
            return gcd2(queryL(xa,m,ya,yb),queryR(m+1,xb,ya,yb));
        }
    }
};

NodeX *root;
ll w,h;
void init(int R, int C) {
    /* ... */
    w=C,h=R;
    n=w;
    root = new NodeX(0,h-1);
}

void update(int P, int Q, long long K) {
    /* ... */
    root->update(P,Q,K);
}

long long calculate(ll P, ll Q, ll U, ll V) {
    /* ... */
    return root->query(P,U,Q,V);
}

Compilation message

grader.c: In function 'int main()':
grader.c:18:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
  int res;
      ^~~
/tmp/ccf1A0gi.o: In function `main':
grader.c:(.text.startup+0xb8): undefined reference to `calculate'
collect2: error: ld returned 1 exit status