제출 #893908

#제출 시각아이디문제언어결과실행 시간메모리
893908NonozeGame (IOI13_game)C++17
37 / 100
1056 ms256000 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; #define int long long vector<vector<int>> st; int n, m; void buildy(int vx, int vy, int lx, int rx, int ly, int ry) { if (ly==ry) { if (lx==rx) { st[vx][vy]=0; } else { st[vx][vy]=__gcd(st[vx*2][vy], st[vx*2+1][vy]); } } else { int midy=ly+(ry-ly)/2; buildy(vx, vy*2, lx, rx, ly, midy); buildy(vx, vy*2+1, lx, rx, midy+1, ry); st[vx][vy]=__gcd(st[vx][vy*2], st[vx][vy*2+1]); } } void buildx(int vx, int lx, int rx) { if (lx!=rx) { int midx=lx+(rx-lx)/2; buildx(vx*2, lx, midx); buildx(vx*2+1, midx+1, rx); } buildy(vx, 1, lx, rx, 0, m-1); } int queryy(int vx, int vy, int ly, int ry, int qly, int qry) { if (ly>qry || ry<qly) return 0; if (ly>=qly && ry<=qry) { return st[vx][vy]; } int midy=ly+(ry-ly)/2; int s1=queryy(vx, vy*2, ly, midy, qly, qry); int s2=queryy(vx, vy*2+1, midy+1, ry, qly, qry); return __gcd(s1, s2); } int queryx(int vx, int lx, int rx, int qlx, int qrx, int qly, int qry) { if (lx>qrx || rx<qlx) return 0; if (lx>=qlx && rx<=qrx) { return queryy(vx, 1, 0, m-1, qly, qry); } int midx=lx+(rx-lx)/2; int s1=queryx(vx*2, lx, midx, qlx, qrx, qly, qry); int s2=queryx(vx*2+1, midx+1, rx, qlx, qrx, qly, qry); return __gcd(s1, s2); } void updatey(int vx, int vy, int lx, int rx, int ly, int ry, int qly, int qry, int value) { if (ly>qry || ry<qly) return; if (ly==ry) { if (lx==rx) { st[vx][vy]=value; } else { st[vx][vy]=__gcd(st[vx*2][vy], st[vx*2+1][vy]); } return; } int midy=ly+(ry-ly)/2; updatey(vx, vy*2, lx, rx, ly, midy, qly, qry, value); updatey(vx, vy*2+1, lx, rx, midy+1, ry, qly, qry, value); st[vx][vy]=__gcd(st[vx][vy*2], st[vx][vy*2+1]); return; } void updatex(int vx, int vy, int lx, int rx, int qlx, int qrx, int qry, int qly, int value) { if (lx>qrx || rx<qlx) return; if (lx!=rx) { int midx=lx+(rx-lx)/2; updatex(vx*2, vy, lx, midx, qlx, qrx, qly, qry, value); updatex(vx*2+1, vy, midx+1, rx, qlx, qrx, qly, qry, value); } updatey(vx, vy, lx, rx, 0, m-1, qly, qry, value); return; } #undef int void init(int R, int C) { #define int long long n=R, m=C; st.resize(4*n, vector<int> (4*m, 0)); //buildx(1, 0, n-1); #undef int } void update(int P, int Q, long long K) { #define int long long updatex(1, 1, 0, n-1, P, P, Q, Q, K); #undef int } long long calculate(int P, int Q, int U, int V) { #define int long long return queryx(1, 0, n-1, P, U, Q, V); #undef int }
#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...