test1WA,test2~5AC,test6TLE,求解
查看原帖
test1WA,test2~5AC,test6TLE,求解
762018
E_C_K1The楼主2024/4/12 22:50

这个二分,test1WA,test2~5AC,test6TLE,求解

#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000001];
int halfandfind(int le,int ri,int mi,int number){
	if(a[le]==number)for(int i=le;;i--)if(a[i]!=number)return i+1;
	if(a[mi]==number)for(int i=mi;;i--)if(a[i]!=number)return i+1;
	if(a[ri]==number)for(int i=ri;;i--)if(a[i]!=number)return i+1;
	if(a[mi]>number&&a[ri]>number&&a[le]<number)return halfandfind(le,mi-1,(mi-1+le)/2,number);
	if(a[mi]<number&&a[ri]>number&&a[le]<number)return halfandfind(mi+1,ri,(mi+1+ri)/2,number);
	return -1;
}
int main(){
	cin>>n>>m;
	int willfindnumbers[m+1]={0},where[m+1]={0};
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=m;i++)cin>>willfindnumbers[i];
	for(int i=1;i<=m;i++)where[i]=halfandfind(1,n,(1+n)/2,willfindnumbers[i]);
	for(int i=1;i<=m;i++)cout<<where[i]<<" ";
	return 0;
}
2024/4/12 22:50
加载中...