Submission #131090

#TimeUsernameProblemLanguageResultExecution timeMemory
131090fefeGame (IOI13_game)C++17
63 / 100
3323 ms71100 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{ LL l,r,x; }root[33*MAX_N],tree[66*MAX_N]; LL n,m; LL tn,rn; void init(int R, int C) { n=R; m=C; rn=1; tn=0; } void updateY(LL x,LL l,LL r,LL q,LL v) { if(q < l || q > r) return ; if(l == r){ tree[x].x=v; return ; } LL mid=(l + r) >> 1; updateY(tree[x].l ? tree[x].l : (tree[x].l = ++tn),l,mid,q,v); 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(LL X,LL L,LL R,LL l,LL r,LL 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; mergeY(tree[X].l ? tree[X].l : (tree[X].l = ++tn),tree[L].l,tree[R].l,l,mid,q); 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(LL x,LL l,LL r,LL p,LL 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 ; } LL mid=(l+r)>>1; updateX(root[x].l?root[x].l:(root[x].l=++rn),l,mid,p,q,v); 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(LL x,LL l,LL r,LL s,LL e) { if(!x){ return 0; } if(r<s || e<l){ return 0; } if(s <= l && r <= e){ return tree[x].x; } LL 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(LL x,LL l,LL r,LL sx,LL sy,LL ex,LL ey) { if(r<sx || ex<l) return 0; if(sx <= l && r <= ex){ return readY(root[x].x,0,m-1,sy,ey); } LL 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...