Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int long long
- #define fi first
- #define se second
- #define pb push_back
- #define vi vector<int>
- #define ii pair<int,int>
- #define iii pair<int, ii>
- #define iiii pair<ii, ii>
- #define Task "test"
- #define all(x) x.begin(),x.end()
- using namespace std;
- const int N = 3e5+5;
- const int inf = 1e9+9;
- const int mod = 1e9+7;
- const int base = 33;
- void readfile(){
- if (fopen(Task".inp","r")){
- //freopen(Task".inp","r",stdin);
- //freopen(Task".out","w",stdout);
- }
- }
- int n, Pow[25];
- void outp(int l, int r){
- cout << "? " << l << ' ' << r << '\n';
- cout.flush();
- }
- int inp(){
- int x;
- cin >> x;
- return x;
- }
- void SOL(int x){
- cout << "! " << x << '\n';
- cout.flush();
- }
- void solve(){
- cin >> n;
- vector<int> cur;
- for(int i=1; i<=Pow[n]; i++) cur.pb(i);
- while (cur.size()>=2){
- if (cur.size()==2){
- outp(cur[0],cur[1]);
- int ret = inp();
- if (ret==1) SOL(cur[0]);
- else SOL(cur[1]);
- return;
- }
- vector<int> New;
- for(int j=0; j<cur.size(); j+=4){
- outp(cur[j],cur[j+2]);
- int answ = inp();
- if (answ==0){
- outp(cur[j+1],cur[j+3]);
- int ret = inp();
- if (ret==1) New.pb(cur[j+1]);
- else New.pb(cur[j+3]);
- }
- else if (answ==1){
- outp(cur[j],cur[j+3]);
- int ret = inp();
- if (ret==1) New.pb(cur[j]);
- else New.pb(cur[j+3]);
- }
- else{
- outp(cur[j+1],cur[j+2]);
- int ret = inp();
- if (ret==1) New.pb(cur[j+1]);
- else New.pb(cur[j+2]);
- }
- }
- cur = New;
- }
- SOL(cur[0]);
- }
- void proc(){
- int q;
- cin >> q;
- Pow[0] = 1;
- for(int i=1; i<=18; i++){
- Pow[i] = Pow[i-1]*2;
- }
- //q=1;
- while (q--){
- solve();
- }
- }
- signed main()
- {
- readfile();
- proc();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment