二分求助
查看原帖
二分求助
638371
152chenzihao楼主2022/7/21 08:47
#include<bits/stdc++.h>
using namespace std;

int n,m,a[999999],f[99999],q;

void cinn(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=m;i++){
		scanf("%d",&f[i]);
	}
//	int old=-1;
//	for(int i=1;i<=n;i++){
//		if(a[i]==old){
//			a[i]=-1;
//		}else{
//			old=a[i];
//		}
//	}
}

int work(int m){
	int lo=1,hi=n,mi;
	while(lo<=hi){
		mi=(lo+hi)/2;
		if(f[m]==a[mi]){
			for(int i=mi-1;i>=1;i--){
				if(a[i]!=f[m]){
					break;
				}else{
					mi=i;
				}
			}
			return mi;
		}else if(f[m]<a[mi]){
			hi=mi-1;
		}else{
			lo=mi+1;
		}
	}
	return -1;
}

int coutt(){
	for(int i=1;i<=m;i++){
		printf("%d ",work(i));
	}
}

int main(){
	cinn();
	coutt();
}
2022/7/21 08:47
加载中...