Submission #290006

#TimeUsernameProblemLanguageResultExecution timeMemory
290006egekabas게임 (IOI13_game)C++14
37 / 100
13054 ms10152 KiB
    #include "game.h"
    #include <bits/stdc++.h>
    #define all(x) (x).begin(), (x).end()
    #define ff first
    #define ss second
    #define pb push_back
    #define mp make_pair
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef long double ld;
    typedef pair<ll, ll> pll;
    typedef pair<ull, ull> pull;
    typedef pair<ll, ll> pii;
    typedef pair<ld, ld> pld;
    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;
    }
    struct node{
        ll tl, tr, val;
        node *l = nullptr, *r = nullptr;
        node(ll tlval, ll trval){
            tl = tlval;
            tr = trval;
            val = 0;
        }
        node(){}
        void upd(ll idx, ll nv){
            if(tl == idx && tr == idx){
                val = nv;
                return;
            }
            ll tm = (tl+tr)/2;
            if(idx <= tm){
                if(!l)
                    l = new node(tl, tm);
                l->upd(idx, nv);
            }
            else{
                if(!r)
                    r = new node(tm+1, tr);
                r->upd(idx, nv);
            }
            ll xval = 0, yval = 0;
            if(l)
                xval =  l->val;
            if(r)
                yval = r->val;
            val = gcd2(xval, yval);        
        }
        ll get(ll lef, ll rig){
            
            if(tr < lef || rig < tl)
                return 0;
            if(lef <= tl && tr <= rig){
                return val;
            }
            ll xval = 0, yval = 0;
            if(l)
                xval = l->get(lef, rig);
            if(r)
                yval = r->get(lef, rig);
            return gcd2(xval, yval);
        }
    };
    ll r, c;
    struct seg{
        ll tl, tr;
        node *val;
        seg *l = nullptr, *r = nullptr;
        seg(ll tval, ll rval){
            tl = tval;
            tr = rval;
            val = new node(0, c-1);
        }
        seg(){}
        void upd(ll xidx, ll yidx, ll nv){
            val->upd(yidx, nv);
            if(tl == xidx && tr == xidx){
                return;
            }
            ll tm = (tl+tr)/2;
            if(xidx <= tm){
                if(!l)
                    l = new seg(tl, tm);
                l->upd(xidx, yidx, nv);
            }
            else{
                if(!r)
                    r = new seg(tm+1, tr);
                r->upd(xidx, yidx, nv);
            }
        }
        ll get(ll xl, ll xr, ll yl, ll yr){
            if(tr < xl || xr < tl)
                return 0;
            if(xl <= tl && tr <= xr){
                return val->get(yl, yr);
            }
            ll xval = 0, yval = 0;
            if(l)
                xval = l->get(xl, xr, yl, yr);
            if(r)
                yval = r->get(xl, xr, yl, yr);
            return gcd2(xval, yval);
        }
    };
    seg root;
    node ar[2009];
    void init(int R, int C) {
        r = R;
        c = C;
        for(int i = 0; i < r; ++i)
            ar[i] = node(0, c-1);
        //root = seg(0, r-1);
    }
     
    void update(int P, int Q, long long K) {
        ar[P].upd(Q, K);
        //root.upd(P, Q, K);
    }
     
    long long calculate(int P, int Q, int U, int V){    
        ll ans = 0;
        for(int i = P; i <= U; ++i)
            ans = gcd2(ans, ar[i].get(Q, V));
        return ans;
        return root.get(P, U, Q, V);
    }

Compilation message (stderr)

grader.c: In function 'int main()':
grader.c:18:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
   18 |  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...