第三题TLE,92分求助
查看原帖
第三题TLE,92分求助
1293644
2320508123hzc楼主2024/8/28 20:55

只有第三题TLE,其他时间都很充裕,最慢的才400ms

#include<iostream>
#include<algorithm>

using namespace std;
long long a[223456], c, x = 0, b;
int n, i;
bool cmp(long long a, long long b) {
	return a < b;
}
void findleft(int mid, int key) {
	if (a[mid] != key)return;
	else {
		x++;
		findleft(mid + 1, key);
	}
}
void findright(int mid, int key) {
	if (a[mid] != key)return;
	else {
		x++;
		findright(mid - 1, key);
	}
}
void find(int h,int r,long long key) {
	int mid;
	while (h<=r) {
		mid = (h + r) / 2;
		if (key > a[mid])h = mid + 1;
		else if (key < a[mid])r = mid - 1;
		else {
			x++;
			findleft(mid + 1, key);
			findright(mid - 1, key);
			break;
		}
	}
}
int main() {
	cin >> n >> c;
	for (i = 0; i < n; i++) {
		cin >> a[i];
	}
	sort(a, a + n, cmp);
	for (i = n - 1; i >= 0&&a[i]>=c; i--) {
		b = a[i] - c;
		find(0, i, b);
	}
	cout << x << endl;
	return 0;
}

求助

2024/8/28 20:55
加载中...