QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#557572#8939. PermutationsynonymTL 0ms0kbC++171.4kb2024-09-11 10:19:272024-09-11 10:19:27

Judging History

This is the latest submission verdict.

  • [2024-09-11 10:19:27]
  • Judged
  • Verdict: TL
  • Time: 0ms
  • Memory: 0kb
  • [2024-09-11 10:19:27]
  • Submitted

answer

#include "bits/stdc++.h"
using namespace std;
#define int long long
#define fnt long double
#define all(x) begin(x), end(x)
#define sz(x) (int) (x).size()

map<array<int,2>,int> answers;

int get_second(int l, int r) {
	if (answers.count({l,r})) {
		return answers[{l,r}];
	}
	cout<<"? "<<l<<" "<<r<<endl;
	int res; cin>>res;
	answers[{l,r}] = res;
	return res;
}

int output_answer(int k) {
	cout<<"! "<<k<<endl;
}

const fnt V = .618;

void solve() {
	int n; cin>>n;
	answers.clear();
	int l=1,r=n;
	while (l != r) {
		int p = get_second(l,r);
		if (l+2==r) {
			if (p==l+1) {
				int pp = get_second(l,l+1);
				if (pp == p) {
					output_answer(l);
					return;
				} else {
					output_answer(r);
					return;
				}
			}
			if (p==l) {
				l++;
			} else {
				r--;
			}
			continue;
		}
		if (l+1==r) {
			output_answer(l+r-p);
			return;
		}
		
		int lrp = l+V*(r-l+1);
		int rrp = r-V*(r-l);
		int p2 = -1;
//		cout<<l<<" "<<r<<": "<<lrp<<" "<<rrp<<endl;
		if (p <= lrp) {
			p2 = get_second(l,lrp);
			if (p2 == p) {
				r = lrp;
			} else {
				l = lrp+1;
			}
		} else {
			assert(p >= rrp);
			p2 = get_second(rrp,r);
			if (p2 == p) {
				l = rrp;
			} else {
				r = rrp-1;
			}
		}
	}
	output_answer(l);
}

signed main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);
	
	int t; cin>>t;
	while (t--) {
		solve();
	}
	
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Time Limit Exceeded

input:

3
5
3
3
2
6

output:

? 1 5
? 1 4
? 1 3
! 4






















































































































































































































































































...

result: