Submission #131110

#TimeUsernameProblemLanguageResultExecution timeMemory
131110fefeGame (IOI13_game)C++17
80 / 100
8265 ms256000 KiB
#include "game.h" #include<bits/stdc++.h> #define MAX_N 22005 typedef long long LL; 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 Tree{ int l,r; LL x; }root[33*MAX_N],tree[450*MAX_N]; int n,m; int tn,rn; void init(int R, int C) { n=R; m=C; rn=1; tn=0; } void updateY(int x,int l,int r,int q,LL v) { if(q < l || q > r) return ; if(l == r){ tree[x].x=v; return ; } LL mid=(l + r) >> 1; if(q<=mid) updateY(tree[x].l ? tree[x].l : (tree[x].l = ++tn),l,mid,q,v); if(q>mid) updateY(tree[x].r ? tree[x].r : (tree[x].r = ++tn),mid+1,r,q,v); tree[x].x=gcd2(tree[tree[x].l].x,tree[tree[x].r].x); } void mergeY(int X,int L,int R,int l,int r,int q){ if(q < l || q > r) return ; if(L==0 && R==0){ return ; } if(l == r){ tree[X].x=gcd2(tree[L].x,tree[R].x); return ; } int mid=(l + r) >> 1; if(q<=mid) mergeY(tree[X].l ? tree[X].l : (tree[X].l = ++tn),tree[L].l,tree[R].l,l,mid,q); if(q>mid) mergeY(tree[X].r ? tree[X].r : (tree[X].r = ++tn),tree[L].r,tree[R].r,mid+1,r,q); tree[X].x=gcd2(tree[L].x,tree[R].x); } void updateX(int x,int l,int r,int p,int q,LL v) { if(p<l || p>r) return ; if(l==r){ updateY(root[x].x?root[x].x:(root[x].x=++tn),0,m-1,q,v); return ; } int mid=(l+r)>>1; if(p<=mid) updateX(root[x].l?root[x].l:(root[x].l=++rn),l,mid,p,q,v); if(p>mid) updateX(root[x].r?root[x].r:(root[x].r=++rn),mid+1,r,p,q,v); mergeY(root[x].x?root[x].x:(root[x].x=++tn),root[root[x].l].x,root[root[x].r].x,0,m-1,q); } void update(int P, int Q, long long K) { updateX(1,0,n-1,P,Q,K); } LL readY(int x,int l,int r,int s,int e) { if(!x){ return 0; } if(r<s || e<l){ return 0; } if(s <= l && r <= e){ return tree[x].x; } int mid = (l + r) >> 1; return gcd2(readY(tree[x].l,l,mid,s,e),readY(tree[x].r,mid+1,r,s,e)); } LL readX(int x,int l,int r,int sx,int sy,int ex,int ey) { if(r<sx || ex<l) return 0; if(sx <= l && r <= ex){ return readY(root[x].x,0,m-1,sy,ey); } int mid = (l + r) >> 1; return gcd2(readX(root[x].l,l,mid,sx,sy,ex,ey),readX(root[x].r,mid+1,r,sx,sy,ex,ey)); } long long calculate(int P, int Q, int U, int V) { return readX(1,0,n-1,P,Q,U,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]
  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...