제출 #393800

#제출 시각아이디문제언어결과실행 시간메모리
393800MKopchev게임 (IOI13_game)C++14
컴파일 에러
0 ms0 KiB
#include "game.h" #include<bits/stdc++.h> using namespace std; struct info { long long g; int l,r; }; vector< vector<info> > tree; int pointer; int make_info() { info me; me.g=0; me.l=-1; me.r=-1; vector<info> now={}; now.push_back(me); now.push_back(me); tree.push_back(now); pointer++; //cout<<"make_info "<<pointer-1<<endl; return pointer-1; } int build(int id) { //int ret=tree[id].size(); info me; me.g=0; me.l=-1; me.r=-1; tree[id].push_back(me); //cout<<"build "<<id<<" "<<ret<<endl; return tree[id].size()-1; } 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; } int n,m; int x1,y1,x2,y2; void init(int R, int C){ n=R-1; m=C-1; make_info(); } long long ask_for(int id,int lq,int rq) { if(id==-1)return 0; int l=0,r=m; int node=1; while(l!=lq&&r!=rq) { int av=(l+r)/2; if(rq<=av) { if(tree[id][node].l==-1)return 0; node=tree[id][node].l; r=av; } else { if(tree[id][node].r==-1)return 0; node=tree[id][node].r; l=av+1; } } return tree[id][node].g; } long long minor_update(int id,int node,int l,int r,int y,long long val,bool type) { //cout<<"minor_update "<<id<<" "<<node<<" "<<l<<" "<<r<<" "<<y<<" "<<val<<" "<<type<<" "<<tree[id].size()<<endl; if(l==r) { if(type==1)tree[id][node].g=val; else tree[id][node].g=gcd2(ask_for(tree[id][0].l,l,r),ask_for(tree[id][0].r,l,r)); //cout<<"stop "<<id<<" "<<node<<" -> "<<tree[id][node].g<<endl; return tree[id][node].g; } int av=(l+r)/2; long long ret=0; if(y<=av) { if(tree[id][node].l==-1) { int help=build(id); tree[id][node].l=help; //tree[id][node].l=build(id); } minor_update(id,tree[id][node].l,l,av,y,val,type); } else { if(tree[id][node].r==-1) { int help=build(id); tree[id][node].r=help; //tree[id][node].r=build(id); } minor_update(id,tree[id][node].r,av+1,r,y,val,type); } if(tree[id][node].l!=-1)ret=gcd2(ret,tree[id][tree[id][node].l].g); if(tree[id][node].r!=-1)ret=gcd2(ret,tree[id][tree[id][node].r].g); tree[id][node].g=ret; //cout<<id<<" "<<node<<" -> "<<tree[id][node].g<<endl; return ret; } void main_update(int node,int l,int r,int x,int y,long long val) { if(l==r) { minor_update(node,1,0,m,y,val,1); return; } int av=(l+r)/2; if(x<=av) { if(tree[node][0].l==-1) { int help=make_info(); tree[node][0].l=help; } main_update(tree[node][0].l,l,av,x,y,val); } else { if(tree[node][0].r==-1) { int help=make_info(); tree[node][0].r=help; } main_update(tree[node][0].r,av+1,r,x,y,val); } minor_update(node,1,0,m,y,val,0); } void update(int P, int Q, long long K) { main_update(0,0,n,P,Q,K); //cout<<"---"<<endl; } long long minor_query(int id,int node,int l,int r,int lq,int rq) { if(l==lq&&r==rq) { //cout<<"minor "<<id<<" "<<node<<" "<<l<<" "<<r<<" -> "<<tree[id][node].g<<endl; return tree[id][node].g; } long long ret=0; int av=(l+r)/2; if(lq<=av) { if(tree[id][node].l!=-1)ret=gcd2( ret,minor_query(id,tree[id][node].l,l,av,lq,min(av,rq))); } if(av<rq) { if(tree[id][node].r!=-1)ret=gcd2(ret,minor_query(id,tree[id][node].r,av+1,r,max(av+1,lq),rq)); } return ret; } long long main_query(int node,int l,int r,int lq,int rq) { if(l==lq&&r==rq)return minor_query(node,1,0,m,y1,y2); long long ret=0; int av=(l+r)/2; if(lq<=av) { if(tree[node][0].l!=-1)ret=gcd2(ret,main_query(tree[node][0].l,l,av,lq,min(av,rq))); } if(av<rq) { if(tree[node][0].r!=-1)ret=gcd2(ret,main_query(tree[node][0].r,av+1,r,max(av+1,lq),rq)); } return ret; } long long calculate(int P, int Q, int U, int V) { x1=P; y1=Q; x2=U; y2=V; return main_query(0,0,n,x1,x2); } /* int main() { init(2,3); update(0,0,20); update(0,2,15); update(1,1,12); cout<<calculate(0,0,0,2)<<endl;//5 cout<<calculate(0,0,1,1)<<endl;//4 update(0,1,6); update(1,1,14); cout<<calculate(0,0,0,2)<<endl;//1 cout<<calculate(0,0,1,1)<<endl;//2 return 0; } */

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

game.cpp:60:8: error: 'int y1' redeclared as different kind of entity
   60 | int x1,y1,x2,y2;
      |        ^~
In file included from /usr/include/features.h:424,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/os_defines.h:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/c++config.h:524,
                 from /usr/include/c++/9/cassert:43,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/stdc++.h:33,
                 from game.cpp:2:
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:221:1: note: previous declaration 'double y1(double)'
  221 | __MATHCALL (y1,, (_Mdouble_));
      | ^~~~~~~~~~
game.cpp: In function 'long long int main_query(int, int, int, int, int)':
game.cpp:210:51: error: invalid conversion from 'double (*)(double) throw ()' {aka 'double (*)(double)'} to 'int' [-fpermissive]
  210 |     if(l==lq&&r==rq)return minor_query(node,1,0,m,y1,y2);
      |                                                   ^~
      |                                                   |
      |                                                   double (*)(double) throw () {aka double (*)(double)}
game.cpp:184:55: note:   initializing argument 5 of 'long long int minor_query(int, int, int, int, int, int)'
  184 | long long minor_query(int id,int node,int l,int r,int lq,int rq)
      |                                                   ~~~~^~
game.cpp: In function 'long long int calculate(int, int, int, int)':
game.cpp:230:7: error: assignment of function 'double y1(double)'
  230 |     y1=Q;
      |     ~~^~