Submission #88372

#TimeUsernameProblemLanguageResultExecution timeMemory
88372gs18115Game (IOI13_game)C++14
0 / 100
2 ms424 KiB
#include "game.h" typedef long long LL; LL gcd2(LL X, LL Y) { LL tmp; while (X != Y && Y != 0) { tmp = X; X = Y; Y = tmp % Y; } return X; } struct SY { bool flag; int Y; SY*l,*r; LL val; SY() { flag=true; val=0; l=r=nullptr; } inline void update(int y,int p) { Y=y; val=p; return; } void update(int L,int R,int y,int p) { if(L==R) { val=p; return; } int mid=L+R>>1; if(flag) { if(Y==y) { val=p; return; } if(Y>mid) { r=new SY(); r->update(Y,val); } else { l=new SY(); l->update(Y,val); } if(y>mid) { if(!r) { r=new SY(); r->update(y,p); } else r->update(mid+1,R,y,p); } else { if(!l) { l=new SY(); l->update(y,p); } else l->update(L,mid,y,p); } flag=false; LL LP,RP; if(!l) LP=0; else LP=l->val; if(!r) RP=0; else RP=r->val; val=gcd2(LP,RP); return; } if(y>mid) { if(!r) { r=new SY(); r->update(y,p); } else r->update(mid+1,R,y,p); } else { if(!l) { l=new SY(); l->update(y,p); } else l->update(L,mid,y,p); } LL LP,RP; if(!l) LP=0; else LP=l->val; if(!r) RP=0; else RP=r->val; val=gcd2(LP,RP); return; } void update(SY*P,int L,int R,int y,int p) { val=P->val; flag=P->flag; Y=P->Y; if(L==R) return; int mid=L+R>>1; if(y>mid) { if(!P->r) return; else if(!r) { r=new SY(); r->update(y,p); } else r->update(P->r,mid+1,R,y,p); } else { if(!P->l) return; else if(!l) { l=new SY(); l->update(y,p); } else l->update(P->l,L,mid,y,p); } return; } void update(SY*Lp,SY*Rp,int L,int R,int y,int p) { val=gcd2(Lp->val,Rp->val); flag=false; if(L==R) return; int mid=L+R>>1; if(y>mid) { if(!Lp->r&&!Rp->r) return; else if(!r) { r=new SY(); r->update(y,p); } else if(!Lp->r) r->update(Rp->r,mid+1,R,y,p); else if(!Rp->r) r->update(Lp->r,mid+1,R,y,p); else r->update(Lp->r,Rp->r,mid+1,R,y,p); } else { if(!Lp->l&&!Rp->l) return; else if(!l) { l=new SY(); l->update(y,p); } else if(!Lp->l) l->update(Rp->l,L,mid,y,p); else if(!Rp->l) l->update(Lp->l,L,mid,y,p); else l->update(Lp->l,Rp->l,L,mid,y,p); } return; } LL query(int L,int R,int y1,int y2) { if(L>y2||R<y1) return 0; if(L>=y1&&R<=y2) return val; if(flag) { if(y1<=Y&&Y<=y2) return val; else return 0; } int mid=L+R>>1; LL LP,RP; if(!l) LP=0; else LP=l->query(L,mid,y1,y2); if(!r) RP=0; else RP=r->query(mid+1,R,y1,y2); return gcd2(LP,RP); } }; struct SX { SX*l,*r; SY*val; SX() { val=new SY(); l=r=nullptr; } void update(int Lx,int Rx,int Ly,int Ry,int x,int y,int p) { if(Lx==Rx) { val->update(Ly,Ry,y,p); return; } int mid=Lx+Rx>>1; if(x>mid) { if(!r) r=new SX(); r->update(mid+1,Rx,Ly,Ry,x,y,p); } else { if(!l) l=new SX(); l->update(Lx,mid,Ly,Ry,x,y,p); } if(!r) val->update(l->val,Ly,Ry,y,p); else if(!l) val->update(r->val,Ly,Ry,y,p); else val->update(l->val,r->val,Ly,Ry,y,p); return; } LL query(int Lx,int Rx,int Ly,int Ry,int x1,int x2,int y1,int y2) { if(Lx>x2||Rx<x1) return 0; if(Lx>=x1&&Rx<=x2) return val->query(Ly,Ry,y1,y2); int mid=Lx+Rx>>1; LL LP,RP; if(!l) LP=0; else LP=l->query(Lx,mid,Ly,Ry,x1,x2,y1,y2); if(!r) RP=0; else RP=r->query(mid+1,Rx,Ly,Ry,x1,x2,y1,y2); return gcd2(LP,RP); } }*rt; int R,C; void init(int R,int C) { ::R=R; ::C=C; rt=new SX(); return; } void update(int P,int Q,long long K) { rt->update(0,R-1,0,C-1,P,Q,K); return; } LL calculate(int P,int Q,int U,int V) { return rt->query(0,R-1,0,C-1,P,U,Q,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;
      ^~~
game.cpp: In member function 'void SY::update(int, int, int, int)':
game.cpp:37:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
         int mid=L+R>>1;
                 ~^~
game.cpp: In member function 'void SY::update(SY*, int, int, int, int)':
game.cpp:127:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
         int mid=L+R>>1;
                 ~^~
game.cpp: In member function 'void SY::update(SY*, SY*, int, int, int, int)':
game.cpp:160:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
         int mid=L+R>>1;
                 ~^~
game.cpp: In member function 'LL SY::query(int, int, int, int)':
game.cpp:208:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
         int mid=L+R>>1;
                 ~^~
game.cpp: In member function 'void SX::update(int, int, int, int, int, int, int)':
game.cpp:237:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
         int mid=Lx+Rx>>1;
                 ~~^~~
game.cpp: In member function 'LL SX::query(int, int, int, int, int, int, int, int)':
game.cpp:264:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
         int mid=Lx+Rx>>1;
                 ~~^~~
#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...