Submission #962990

# Submission time Handle Problem Language Result Execution time Memory
962990 2024-04-14T10:33:18 Z NValchanov Game (IOI13_game) C++17
63 / 100
1386 ms 256000 KB
#include <bits/stdc++.h>
#include "game.h"

using namespace std;
typedef long long ll;

const ll MAXN = 2e3 + 10;

long long gcd2(long long X, long long Y) {

    if(X == 0 && Y == 0)
        return 0;
    else if(X == 0 && Y != 0)
        return Y;
    else if(X != 0 && Y == 0)
        return X;

    long long tmp;
    while (X != Y && Y != 0) {
        tmp = X;
        X = Y;
        Y = tmp % Y;
    }
    return X;
}

ll n,m;

/// 2D SEGMENT TREE CODE

struct segment_tree_2d
{
    /// SEGMENT TREE CODE
    struct segment_tree
    {
        /// NODE CODE
        struct node
        {
            node *l;
            node *r;
            ll val;
            node()
            {
                val = 0;
                l = nullptr;
                r = nullptr;
            }
            node(ll _val)
            {
                val = _val;
                l = nullptr;
                r = nullptr;
            }
        };


        node *root;
        segment_tree *l;
        segment_tree *r;

        segment_tree()
        {
            root = new node();
            l = nullptr;
            r = nullptr;
        }

        void merge_nodes(node *tree)
        {
            if(tree -> l == nullptr)
                tree -> l = new node();
            if(tree -> r == nullptr)
                tree -> r = new node();
            tree -> val = gcd2(tree -> l -> val, tree -> r -> val);
        }

        void update(node *tree, ll left, ll right, ll pos, ll x)
        {
            if(left == right)
            {
                tree -> val = x;
                return;
            }

            ll mid = left + (right - left) / 2;

            if(pos <= mid)
            {
                if(tree -> l == nullptr)
                    tree -> l = new node();
                update(tree -> l, left, mid, pos, x);
            }
            else
            {
                if(tree -> r == nullptr)
                    tree -> r = new node();
                update(tree -> r, mid + 1, right, pos, x);
            }

            merge_nodes(tree);
        }

        ll query(node *tree, ll left, ll right, ll qleft, ll qright)
        {
            if(tree == nullptr)
                return 0LL;

            if(qright < left || right < qleft)
                return 0LL;

            if(qleft <= left && right <= qright)
                return tree -> val;

            ll mid = left + (right - left) / 2;

            ll Lnode = query(tree -> l, left, mid, qleft, qright);
            ll Rnode = query(tree -> r, mid + 1, right, qleft, qright);

            return gcd2(Lnode, Rnode);
        }

        void update(ll pos, ll x)
        {
            update(root, 0, m - 1, pos, x);
        }

        ll query(ll qleft, ll qright)
        {
            return query(root, 0, m - 1, qleft, qright);
        }
    };

    segment_tree *root;
    segment_tree_2d()
    {
        root = new segment_tree();
    }

    void merge(segment_tree *tree, ll pos)
    {
        if(tree -> l == nullptr)
            tree -> l = new segment_tree();
        if(tree -> r == nullptr)
            tree -> r = new segment_tree();

        ll Lnode = tree -> l -> query(pos, pos);
        ll Rnode = tree -> r -> query(pos, pos);

        tree -> update(pos, gcd2(Lnode, Rnode));
    }

    void update(segment_tree *tree, ll left, ll right, ll row, ll col, ll x)
    {
        if(left == right)
        {
            tree -> update(col, x);
            return;
        }

        ll mid = left + (right - left) / 2;

        if(row <= mid)
        {
            if(tree -> l == nullptr)
                tree -> l = new segment_tree();
            update(tree -> l, left, mid, row, col, x);
        }
        else
        {
            if(tree -> r == nullptr)
                tree -> r = new segment_tree();
            update(tree -> r, mid + 1, right, row, col, x);
        }

        merge(tree, col);
    }

    ll query(segment_tree *tree, ll left, ll right, ll qleft_row, ll qright_row, ll qleft_col, ll qright_col)
    {
        if(tree == nullptr)
            return 0LL;

        if(qright_row < left || right < qleft_row)
            return 0LL;

        if(qleft_row <= left && right <= qright_row)
            return tree -> query(qleft_col, qright_col);

        ll mid = left + (right - left) / 2;

        ll Lnode = query(tree -> l, left, mid, qleft_row, qright_row, qleft_col, qright_col);
        ll Rnode = query(tree -> r, mid + 1, right, qleft_row, qright_row, qleft_col, qright_col);

        return gcd2(Lnode, Rnode);
    }

    void update(ll row, ll col, ll x)
    {
        update(root, 0, n - 1, row, col, x);
    }

    ll query(ll qleft_row, ll qright_row, ll qleft_col, ll qright_col)
    {
        return query(root, 0, n - 1, qleft_row, qright_row, qleft_col, qright_col);
    }

};

segment_tree_2d s;

void init(int R, int C)
{
    n = R;
    m = C;
}

void update(int i, int j, long long k)
{
    s.update(i,j,k);
}

ll calculate(int i1, int j1, int i2, int j2)
{
    ll result = s.query(i1, i2, j1, j2);
    return result;
}
/**
int main()
{
    ll r,c,n;
    cin >> r >> c >> n;
    init(r,c);

    for(int i = 0; i < n; i++)
    {
        ll type;
        cin >> type;
        if(type == 1)
        {
            ll x,y,w;
            cin >> x >> y >> w;
            update(x,y,w);
        }
        else
        {
            ll i1,j1,i2,j2;
            cin >> i1 >> j1 >> i2 >> j2;

            cout << calculate(i1, j1, i2, j2) << endl;
        }
    }

    return 0;
}
*/
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 604 KB Output is correct
3 Correct 1 ms 604 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 600 KB Output is correct
10 Correct 1 ms 344 KB Output is correct
11 Correct 1 ms 496 KB Output is correct
12 Correct 1 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 461 ms 18236 KB Output is correct
5 Correct 334 ms 18512 KB Output is correct
6 Correct 420 ms 15612 KB Output is correct
7 Correct 444 ms 15276 KB Output is correct
8 Correct 289 ms 10144 KB Output is correct
9 Correct 488 ms 15444 KB Output is correct
10 Correct 461 ms 15116 KB Output is correct
11 Correct 0 ms 344 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 2 ms 600 KB Output is correct
3 Correct 2 ms 604 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 604 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 1 ms 508 KB Output is correct
12 Correct 812 ms 22432 KB Output is correct
13 Correct 1086 ms 8740 KB Output is correct
14 Correct 275 ms 916 KB Output is correct
15 Correct 1223 ms 12900 KB Output is correct
16 Correct 204 ms 29520 KB Output is correct
17 Correct 776 ms 18336 KB Output is correct
18 Correct 1386 ms 29868 KB Output is correct
19 Correct 1181 ms 29868 KB Output is correct
20 Correct 1111 ms 29352 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 604 KB Output is correct
3 Correct 1 ms 856 KB Output is correct
4 Correct 1 ms 600 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 600 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 475 ms 18324 KB Output is correct
13 Correct 311 ms 18612 KB Output is correct
14 Correct 414 ms 15712 KB Output is correct
15 Correct 477 ms 15396 KB Output is correct
16 Correct 297 ms 10068 KB Output is correct
17 Correct 454 ms 15440 KB Output is correct
18 Correct 486 ms 15032 KB Output is correct
19 Correct 775 ms 22444 KB Output is correct
20 Correct 1100 ms 8776 KB Output is correct
21 Correct 259 ms 1104 KB Output is correct
22 Correct 1255 ms 13012 KB Output is correct
23 Correct 226 ms 29592 KB Output is correct
24 Correct 716 ms 18156 KB Output is correct
25 Correct 1384 ms 30048 KB Output is correct
26 Correct 1222 ms 30092 KB Output is correct
27 Correct 1082 ms 29412 KB Output is correct
28 Runtime error 529 ms 256000 KB Execution killed with signal 9
29 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 604 KB Output is correct
3 Correct 1 ms 604 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 1 ms 600 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 1 ms 424 KB Output is correct
12 Correct 490 ms 18404 KB Output is correct
13 Correct 311 ms 18512 KB Output is correct
14 Correct 395 ms 15716 KB Output is correct
15 Correct 469 ms 15572 KB Output is correct
16 Correct 288 ms 10160 KB Output is correct
17 Correct 460 ms 15608 KB Output is correct
18 Correct 402 ms 15184 KB Output is correct
19 Correct 745 ms 22472 KB Output is correct
20 Correct 1006 ms 8888 KB Output is correct
21 Correct 252 ms 896 KB Output is correct
22 Correct 1186 ms 13088 KB Output is correct
23 Correct 196 ms 29520 KB Output is correct
24 Correct 717 ms 18512 KB Output is correct
25 Correct 1303 ms 29776 KB Output is correct
26 Correct 1114 ms 29920 KB Output is correct
27 Correct 1081 ms 29296 KB Output is correct
28 Runtime error 525 ms 256000 KB Execution killed with signal 9
29 Halted 0 ms 0 KB -