QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#566264 | #8939. Permutation | UNos_maricones# | TL | 0ms | 0kb | C++23 | 1.6kb | 2024-09-15 23:35:01 | 2024-09-15 23:35:01 |
Judging History
answer
#include<bits/stdc++.h>
#define ff first
#define ss second
#define ll long long
#define pb push_back
using namespace std;
map<pair<int, int>, int > respuestas;
int ask(int l, int r){
if(respuestas.count({l, r})){
return respuestas[{l, r}];
}
cout << "? " << l << " " << r << endl;
cout.flush();
int answ;
cin >> answ;
respuestas[{l, r}] = answ;
return answ;
}
void responder(int v){
cout << "! " << v << endl;
cout.flush();
}
int solv(int l, int r, int p);
int solv(int l, int r){
if(l == r)return l;
int p = ask(l, r);
return solv(l, r, p);
}
int solv(int l, int r, int p){
if(l == r)return l;
if(p == l && r - l == 1)return r;
if(p == r && r - l == 1)return l;
int mita = (l + r )/2;
int q1 =l + (((double)r - (double)l + 1.0)/(double)4);
int q2 =l + (double)3 * ((double)r - (double)l + 1.0)/(double)4;
if(p <= mita){
int s = ask(l, mita);
if(s == p){
return solv(l, mita, p);
}
s = ask(p, q2);
if(s == p){
return solv(mita + 1, q2);
}else{
return solv(q2 + 1, r);
}
}else{
int s = ask(mita, r);
if(s == p){
return solv(mita, r, p);
}
s = ask(q1, p);
if(s == p){
return solv(q1, mita - 1);
}else{
return solv(l, q1);
}
}
}
int main(){
#ifdef LOCAL
//freopen("in.txt", "r", stdin);
#endif // LOCAL
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(NULL);
int t;
cin >> t;
while(t--){
respuestas.clear();
int n;
cin >> n;
responder(solv(1, n));
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Time Limit Exceeded
input:
3 5 3 2 3 6 6 3 6 4 3 3 2
output:
? 1 5 ? 1 3 ? 3 4 ! 4 ? 1 6 ? 3 6 ? 2 6 ! 2 ? 1 4 ? 2 4 ? 2 3 ? 3 4