求助,只有20分。
查看原帖
求助,只有20分。
535491
newbie_QwQ楼主2022/5/1 21:51
#include<iostream>
#include<cmath>
using namespace std;
long long d[5005],v[5005];
int main()
{
	long long i,j,n,m,k,t,l,r,mid,x,ans,now,te;
	cin>>t;
	while(t--)
	{
		cin>>n;
		for(i=1;i<=n;i++) v[i]=1;
		m=n;
		while(m)
		{
			cout<<"? 1 "<<n<<endl;
			fflush(stdout);
			cin>>x;
			ans=0;
			l=1;
			r=m;
			mid=(l+r)/2;
			while(l<=r)
			{
				cout<<"? 1 "<<mid<<endl;
				fflush(stdout);
				cin>>k;
				if(k==x-1)
				{
					ans=max(ans,mid);
					l=mid+1;
					mid=(l+r)/2;
				}
				else if(k<x-1)
				{
					ans=max(ans,mid);
					l=mid+1;
					mid=(l+r)/2;
				}
				else
				{
					r=mid-1;
					mid=(l+r)/2;
				}
			}
			te=ans+1;
			while(v[te]==0&&te<=n) te++;
			if(te!=n+1) ans=te;
			if(ans==0)
			{
				if(m!=1) cout<<"? 2 1"<<endl;
				d[1]=m;
				m--;
			}
			else
			{
				if(m!=1) 
				{
					cout<<"? 2 "<<ans<<endl;
					fflush(stdout);
				}
				v[ans]=0;
				d[ans]=m;
				m--;
			}
		}
		cout<<"! ";
		for(i=1;i<=n;i++) cout<<d[i]<<" ";
		cout<<endl;
		fflush(stdout);
	}
}
2022/5/1 21:51
加载中...