死循环求助(玄关)
查看原帖
死循环求助(玄关)
1328579
mairuisheng楼主2024/8/17 15:09

二分:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n,i,q;
LL m;
struct bottle
{
	int num;
	LL sum;
}bot[100001];
bool cmp(bottle x,bottle y)
{
	return x.sum<y.sum;
}
int search(LL x,int l,int r)
{
	if(l>r)return 0;
	if(bot[(r%2==0)?r/2:r/2+1].sum==x)return bot[(r%2==0)?r/2:r/2+1].num;
	else if(bot[(r%2==0)?r/2:r/2+1].sum<x)return search(x,((r%2==0)?r/2:r/2+1)+1,r);
	else return search(x,l,((r%2==0)?r/2:r/2+1)-1);
}
int main()
{
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%lld",&bot[i].sum);
		bot[i].num=i;
	}
	sort(bot+1,bot+n+1,cmp);
	scanf("%d",&q);
	for(i=1;i<=q;i++)
	{
		scanf("%lld",&m);
		printf("%d\n",search(m,1,n));
	}
	return 0;
}
2024/8/17 15:09
加载中...