站外题求助,样例过了
  • 板块灌水区
  • 楼主封禁用户
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/8/10 20:38
  • 上次更新2024/8/10 21:50:35
查看原帖
站外题求助,样例过了
1053866
封禁用户楼主2024/8/10 20:38
【题目描述】
给出n个数,
m次询问。
每次询问数字x在n个数中出现的次数。

【输入格式】
第一行输入两个整数n和m。

第二行输入n个整数。

第三行输入m个整数,每个整数表示一次询问。

【输出格式】
输出一行m个数,表示每次询问的答案。答案之间用空格隔开。

【输入样例】
5 3
6 15 15 23 50
6 15 20
【输出样例】
1 2 0
【数据范围】
30%的数据,1≤n,m≤1000,1≤ai≤1000;
50%的数据,1≤n,m≤1000,−1000≤ai≤1000;
100%的数据,
1≤n,m≤100000,
−1000000000≤ai≤1000000000;

我的思路:先排序,二分一个数最先和最后出现的位置,最后减一减。
代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int f1(int d[],int l,int r,int k){
	while(l<r){
		int mid=(l+r)/2;
		if(d[mid]>=k)
			r=mid;
		else
			l=mid+1;
	}
	return l;
}
int f2(int d[],int l,int r,int k){
	while(l<r){
		int mid=(l+r+1)/2;
		if(d[mid]<=k)
			l=mid;
		else
			r=mid-1;
	}
	return l;
}
signed main(){
	int n,m,a[123456];
	cin>>n>>m;
	for(int i=0;i<n;i++)
		cin>>a[i];
	for(int i=0;i<m;i++){
		int k;
		cin>>k;
		cout<<f2(a,0,n-1,k)-f1(a,0,n-1,k)+1<<" ";
	}
}
2024/8/10 20:38
加载中...