用的二分,第一个测试点wa,最后一个超时,其他全过
查看原帖
用的二分,第一个测试点wa,最后一个超时,其他全过
574873
Yin_haoran233楼主2021/12/31 12:56
#include <stdio.h>
const  int N=1e6+10;
int a[N],date[N],x,y;
void find(int i)
{
		int tou=0;
		int wei=x-1;
		while(tou<=wei)
		{	
		int zhong=(tou+wei)/2;
		if(date[i]==a[zhong])
		{	
			while(a[zhong]==a[zhong-1])zhong--;
			printf("%d ",zhong+1);
			return;
		}
		else if(date[i]>a[zhong])
		{
			tou=zhong+1;
		}
		else if(date[i]<a[zhong])
		{
			wei=zhong-1;
		}
		}
		printf("-1 ");	
}
int main()
{
	scanf("%d %d",&x,&y);
	for(int i=0;i<x;i++)scanf("%d",&a[i]);
	for(int i=0;i<y;i++)scanf("%d",&date[i]);
	for(int i=0;i<y;i++)find(i);
	return 0;
} 
2021/12/31 12:56
加载中...