제출 #626150

#제출 시각아이디문제언어결과실행 시간메모리
626150PoonYaPat게임 (IOI13_game)C++14
컴파일 에러
0 ms0 KiB
#include "game.h"

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;

int r,c;
ll s[2001][2001];

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;
}

ll gcd(ll x, ll y) {
    if (x==0) return y;
    if (y==0) return x;
    return gcd2(x,y);
}

void init(int R, int C) {
    r=R;
    c=C;
}

void update_y(int lx, int rx, int idx_x, int ly, int ry, int idx_y, int x, int y, ll val) {
    if (ly>y || ry<y) return;
    if (ly==ry) {
        if (lx==rx) {
            s[pii(idx_x,idx_y)]=val;
        } else {
            s[idx_x][idx_y]=gcd(s[2*idx_x][idx_y],s[2*idx+1][idx_y]);
        }
    } else {
        int mid=(ly+ry)/2;
        update_y(lx,rx,idx_x,ly,mid,2*idx_y,x,y,val);
        update_y(lx,rx,idx_x,mid+1,ry,2*idx_y+1,x,y,val);
        s[idx_x][idx_y]=gcd(s[idx_x][2*idx_y],s[idx_x][2*idx_y+1])
    }
}

void update_x(int lx, int rx, int idx_x, int x, int y, ll val) {
    if (lx>x || rx<x) return;
    if (lx!=rx) {
        int mid=(lx+rx)/2;
        update_x(lx,mid,2*idx_x,x,y,val);
        update_x(mid+1,rx,2*idx_x+1,x,y,val);
    }
    update_y(lx,rx,idx_x,1,c,1,x,y,val);
}

void update(int P, int Q, long long K) {
    ++P; ++Q;
    update_x(1,r,1,P,Q,K);
}

ll query_y(int idx_x, int ly, int ry, int idx_y, int y1, int y2) {
    if (y1>ry || y2<ly) return 0;
    if (y1<=ly && ry<=y2) return s[idx_x][idx_y];
    int mid=(ly+ry)/2;
    return gcd(query_y(idx_x,ly,mid,2*idx_y,y1,y2),query_y(idx_x,mid+1,ry,2*idx_y+1,y1,y2));
}

ll query_x(int lx, int rx, int idx_x, int x1, int y1, int x2, int y2) {
    if (x1>rx || x2<lx) return 0;
    if (x1<=lx && rx<=x2) return query_y(idx_x,1,c,1,y1,y2);
    int mid=(lx+rx)/2;
    return gcd(query_x(lx,mid,2*idx_x,x1,y1,x2,y2),query_x(mid+1,rx,2*idx_x+1,x1,y1,x2,y2));
}

long long calculate(int P, int Q, int U, int V) {
    ++P; ++Q; ++U; ++V;
    if (P>U) swap(P,U);
    if (Q>V) swap(Q,V);
    return query_x(1,r,1,P,Q,U,V);
}

컴파일 시 표준 에러 (stderr) 메시지

game.cpp: In function 'void update_y(int, int, int, int, int, int, int, int, ll)':
game.cpp:36:14: error: no match for 'operator[]' (operand types are 'll [2001][2001]' {aka 'long long int [2001][2001]'} and 'pii' {aka 'std::pair<int, int>'})
   36 |             s[pii(idx_x,idx_y)]=val;
      |              ^
game.cpp:38:55: error: 'idx' was not declared in this scope
   38 |             s[idx_x][idx_y]=gcd(s[2*idx_x][idx_y],s[2*idx+1][idx_y]);
      |                                                       ^~~
game.cpp:44:67: error: expected ';' before '}' token
   44 |         s[idx_x][idx_y]=gcd(s[idx_x][2*idx_y],s[idx_x][2*idx_y+1])
      |                                                                   ^
      |                                                                   ;
   45 |     }
      |     ~