제출 #376040

#제출 시각아이디문제언어결과실행 시간메모리
376040wind_reaper게임 (IOI13_game)C++17
37 / 100
13091 ms8304 KiB
#include "game.h"
#include <bits/stdc++.h>

using namespace std;

struct SegmentTree{
    struct Node{
        int64_t val;
        Node *lc, *rc;
 
        Node() : lc(0), rc(0) {
            val = 0LL;
        }
    };
    
    deque<Node> tree;
 
    Node* new_node(){
        tree.emplace_back();
        return &tree.back();
    }

    Node *root;
    int L, R;

    void init(int _L, int _R){
        this->L = _L;
        this->R = _R;
        root = new_node();
    }
 
    void update(int idx, int64_t val, Node* &node, int l, int r){
        if(!node) node = new_node();
        if(r - l == 1){
            node->val = val;
            return;
        }
 
        int mid = (l + r) >> 1;
 
        if(idx < mid) update(idx, val, node->lc, l, mid);
        else update(idx, val, node->rc, mid, r);
 
        node->val = __gcd((node->lc ? node->lc->val : 0), (node->rc ? node->rc->val : 0));
    }
 
    int64_t query(int l, int r, Node* &node, int lx, int rx){
        if(r <= lx || l >= rx || !node)
            return 0;
        if(lx >= l && rx <= r)
            return node->val;
 
        int mid = (lx + rx) >> 1;
        
        return __gcd(query(l, r, node->lc, lx, mid), query(l, r, node->rc, mid, rx));
    }
 
    void update(int idx, int64_t val){
        update(idx, val, root, L, R);
    }
 
    int64_t query(int l, int r){
        return query(l, r, root, L, R);
    }
};

vector<SegmentTree> T;

void init(int R, int C) {
    T.resize(R);
    for(int i = 0; i < R; i++){
        T[i].init(0, C);
    }
}

void update(int P, int Q, long long K) {
    T[P].update(Q, K);
}

long long calculate(int P, int Q, int U, int V) {
    int64_t res = 0;
    for(int i = P; i <= U; i++){
        res = __gcd(res, T[i].query(Q, V+1));
    }
    return 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...