大佬救命,最后一个点超时了
查看原帖
大佬救命,最后一个点超时了
789235
aectgpl楼主2022/9/7 19:15
#include<iostream>
using namespace std;
int a[1000001];
int c[100001];
int b[100001];
int main() {
	int n=0, m=0;
 	cin >> n >> m;
	for (int i = 0;i < n;i++) {
		scanf("%d",&a[i]);
	}
	for (int i = 0;i < m;i++) {
		scanf("%d",&b[i]);
	}
	int u=0;
	for (int i = 0;i < m;i++) {
		bool p=true;
 		int j = 0, tou = 0, wei = n;
		while (p == true) {
			j = a[(tou + wei) / 2];
			if (j < b[i]) {tou = (tou + wei) / 2;}
			if (j > b[i]) { wei = (tou + wei) / 2;}
			if (tou == wei - 1 && a[(tou + wei) / 2] != b[i]) { break; }
 			if (j == b[i]) {
				p = false;
				if(a[0]==b[i]){
					printf("%d ", 1);
					break;
				}
				int l=(tou+wei)/2;
				while (a[l] == b[i]) { l--; }
					printf("%d ",l + 2);
				break;
			}
		}
		if (p == true) { printf("%d ", -1); }
	}
	return 0;
}
2022/9/7 19:15
加载中...