CF843B Interactive LowerBound
思路:把链表读入进来,随机询问
这
实际上,从整个序列里面随机选
因为已知该链表是递增的,可以先随机询问
参考代码:
#include<bits/stdc++.h>
using namespace std;
int n,a,x,ans;
int arr[100001],brr[100001];
int main(){
srand(time(0));
cin>>n>>a>>x;
ans=a;
for(int i=1;i<=1000;i++){
int res=1ll*rand()*rand()%n+1;
cout<<"? "<<res<<endl;
cin>>arr[res]>>brr[res];
if(arr[ans]<arr[res]&&arr[res]<=x){
ans=res;
}
}
for(int i=ans;i!=-1;i=brr[i]){
cout<<"? "<<i<<endl;
cin>>arr[i]>>brr[i];
if(arr[i]>=x){
cout<<"! "<<arr[i]<<endl;
return 0;
}
}
cout<<"! -1"<<endl;
}