省略
省略
C++に変換後のコードはこちら
int N;
int ask(int x, int y){
int r;
printf("? %d %d\n",x+1,y+1);
fflush(stdout);
scanf("%d",&r);
return r-1;
}
void answer(int x){
printf("! %d\n", x+1);
fflush(stdout);
}
int a[2000], b[2000];
int rank1[2000], rank2[2000];
void solve1(int node, int lef, int rig){
int i, j, k;
int n1, n2, sz;
sz = rig - lef;
if(sz==1){
rank1[node] = lef;
return;
}
n1 = 2node + 1;
n2 = 2node + 2;
solve1(n1, lef, lef+sz/2);
solve1(n2, lef+sz/2, rig);
rank1[node] = ask(rank1[n1], rank1[n2]);
}
void solve2(int node, int lef, int rig){
int i, j, k;
int n1, n2, sz;
int s1, s2;
sz = rig - lef;
if(sz==1){
rank2[node] = -1;
return;
}
s1 = n1 = 2node + 1;
s2 = n2 = 2node + 2;
if(rank1[node] == rank1[n2]) swap(s1, s2);
if(s1==n1) solve2(n1, lef, lef+sz/2);
if(s1==n2) solve2(n2, lef+sz/2, rig);
if(rank2[s1]==-1){
rank2[node] = rank1[s2];
} else {
rank2[node] = ask(rank1[s2], rank2[s1]);
}
}
{
scanf("%d",&N);
solve1(0, 0, N);
solve2(0, 0, N);
answer(rank2[0]);
}
Current time: 2024年03月28日23時03分06秒
Last modified: 2019年07月06日15時35分27秒 (by laycrs)
Tags: Competitive_Programming_Incomplete yukicoder
トップページに戻る
Logged in as: unknown user (not login)