More Wrong

考虑数 nn 的另一个性质。

由于是一个排列,所以 nn 是排列中的最大值!

我们考虑最大值的性质。

区间 [l,r][l,r] 的最大值所在位置 xx 一定有这样的性质,[l,x1][l,x-1] 的逆序对个数和 [l,x][l,x] 逆序对数相同。

考虑分治。设 f(l,r)f(l,r)[l,r][l,r] 中最大值所在位置。分治合并时,最大值一定在两边最大值中的一个。用上述判断方式即可。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
using namespace std;

const int N = 2005;

int t, n;

int query(int l, int r)
{
	printf("? %d %d\n", l, r);
	fflush(stdout);
	int x;
	scanf("%d", &x);
	return x;
}

int solve(int l, int r)
{
	if (l == r) return l;
	if (l == r - 1)
	{
		return (query(l, r) == 1 ? l : r);
	}
	int mid = l + r >> 1;
	int place1 = solve(l, mid), solve2 = solve(mid + 1, r);
	return (query(l, solve2 - 1) == query(l, solve2) ? solve2 : place1);
}

int main()
{
	scanf("%d", &t);
	while (t--)
	{
		scanf("%d", &n);
		printf("! %d\n", solve(1, n));
		fflush(stdout);
	}
	return 0;
}
posted @   HappyBobb  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示