QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#566363 | #8939. Permutation | UNos_maricones# | RE | 1ms | 3664kb | C++23 | 1.6kb | 2024-09-15 23:56:59 | 2024-09-15 23:57:00 |
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 rangos = 0, n;
int ask(int l, int r){
if(l == r)return -1;
rangos += r - l + 1;
assert(rangos <= 3* n);
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, q2;
if(p <= mita){
int s = ask(l, mita);
if(s == p){
return solv(l, mita, p);
}
q2 = (mita + 1 + r)/2;
s = ask(p, q2);
if(s == p){
return solv(mita + 1, q2);
}else{
return solv(q2 + 1, r);
}
}else{
int s = ask(mita + 1, r);
if(s == p){
return solv(mita + 1, r, p);
}
q1 = (l + mita + 1) / 2;
s = ask(q1, p);
if(s == p){
return solv(q1, mita);
}else{
return solv(l, q1-1);
}
}
}
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();
cin >> n;
rangos = 0;
responder(solv(1, n));
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3664kb
input:
3 5 3 2 3 6 6 5 6 3 4 3 3
output:
? 1 5 ? 1 3 ? 3 4 ! 4 ? 1 6 ? 4 6 ? 2 6 ? 2 3 ! 2 ? 1 4 ? 3 4 ! 4
result:
ok Correct (3 test cases)
Test #2:
score: -100
Runtime Error
input:
10000 10 2 2 3 2 10 10 10 9 7 10 5 1 5 6 6 10 4 4 5 4 2 10 10 6 3 2 10 3 3 3 2 10 1 5 1 6 7
output:
? 1 10 ? 1 5 ? 1 3 ? 2 4 ! 4 ? 1 10 ? 6 10 ? 9 10 ? 7 10 ! 6 ? 1 10 ? 1 5 ? 5 8 ? 6 8 ? 6 7 ! 7 ? 1 10 ? 1 5 ? 4 5 ? 2 4 ? 2 3 ! 3 ? 1 10 ? 6 10 ? 3 10 ? 1 2 ! 1 ? 1 10 ? 1 5 ? 1 3 ? 2 3 ! 1 ? 1 10 ? 1 5 ? 1 8 ? 6 8 ? 6 7