10个WA求助贴
  • 板块学术版
  • 楼主gao_shou
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/13 10:11
  • 上次更新2024/4/13 11:40:12
查看原帖
10个WA求助贴
1034531
gao_shou楼主2024/4/13 10:11

题目:

二分查找(==x个数) 题目描述 给定一个包含 n 个整数的数列,及 T 次查询,对于每次查询的 x ,回答 x 在数列中的出现次数?

注意:若 x 不在数列中,个数为 0 。

输入格式 第一行一个整数 n ,表示数列中整数的个数;

第二行 n 个整数(int 范围内),表示数列中的元素;

第三行一个整数 T ,表示询问的次数;

接下来 T 行,每行一个整数 x(int 范围内),表示查询的整数。

输出格式 T 行,每行一个结果。

样例 样例输入 10

7 2 1 3 5 9 5 1 8 1

5

0

1

4

9

10

样例输出 0

3

0

1

0

提示 所有数据满足:1⩽n,T⩽10^ 5

#include <bits/stdc++.h>
using namespace std;
int a[100005],bol=0,sum;
int bins(int l, int r, int x) {
	sum=0;
	while(l<=r) 
	{
		int mid=(l+r)/2;
		if(a[mid]==x)
		{
			sum++;
			int i=mid;
			int j=mid;
			while(bol<2)
			{
				
				j--;
				i++;
				if(a[i]==x)
				{
					sum++;
				}
				else if(a[j]==x)
				{
					sum++;
				}
				else if(a[j]!=x)
				{
					bol++;
				}
				else bol++;
				
			}
		}
		if(a[mid]<x) 
		{
			l=mid+1;
		}
		else 
		{
			r=mid-1;
		}
	}
	return sum;
}

int main() 
{
	int n,t,x;
	cin>>n;
	for(int i=1;i<=n;i++) 
	{
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	cin>>t;
	for(int i=0;i<t;i++) 
	{
		cin>>x;
		int ans=bins(1,n,x);
		cout<<ans<<endl;
		sum=0;
	}
	return 0;
}
2024/4/13 10:11
加载中...