This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
//#define int long long
int n;int m;int K;int Q;
map<pair<int,pair<int,int>>,int>mp;
int ask(int x,int y,int z){
if(x==0){return 0;}
if(x==n+1){return 0;}
if(mp[{x,{y,z}}]){return mp[{x,{y,z}}];}
cout<<"? "<<x<<" "<<y<<" "<<z<<endl;
int ret;
cin>>ret;
mp[{x,{y,z}}]=ret;
return ret;
}
void ot(int x,int y,int z){
cout<<"! "<<x<<" "<<y<<" "<<z<<endl;
exit(0);
}
void chk(int x){
int a;int b;int c;
a=ask(x-1,1,1);
b=ask(x,1,1);
c=ask(x+1,1,1);
if(b>=a&&b>=c){
ot(x,1,1);
}
}
int ok(int pl){
if(ask(pl,1,1)>=ask(pl-1,1,1)){return 0;}
return 1;
}
signed main(){
cin>>n>>m>>K>>Q;
//int l=1;int r=n;
int a;int b;int c;int d;
a=ask(1,1,1);
b=ask(2,1,1);
c=ask(n-1,1,1);
d=ask(n,1,1);
if(a>=b){ot(1,1,1);}
if(d>=c){ot(n,1,1);}
int l=2;int r=n;
while(l<r){
int mi=l+(r-l)/2;
if(ok(mi)){
r=mi;
}else{
l=mi;
}
}
for(int i=l-2;i<=l+2;i++){
if(i<=0||i>n){continue;}
chk(i);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |