有一个测试点tle了,求大佬帮忙调
查看原帖
有一个测试点tle了,求大佬帮忙调
1443967
Kurisu1117楼主2025/1/15 18:16
#include<iostream>
#include<algorithm>
#include<climits>
#include<string>
#include<vector>
#include<cstring>
using namespace std;
int arr1[200100], arr2[200100], cnt = 0;
int solve(int m, int l, int r) {
	while (l <= r) {
		if (arr2[(l + r) / 2] > m) return solve(m, l, (l + r) / 2 - 1);
		else if (arr2[(l + r) / 2] < m) return solve(m, (l + r) / 2 + 1, r);
		else {
			int i = 0, j = 0;
			while (arr2[(l + r) / 2 - i] == m)i++;
			while (arr2[(l + r) / 2 + j] == m)j++;
			return i + j - 1;
		}
	}
	return 0;
}
int main() {
	int n, c;
	cin >> n >> c;
	for (int i = 0; i < n; i++) {
		cin >> arr1[i];
	}
	sort(arr1, arr1 + n);
	for (int i = 0; i < n; i++) {
		arr2[i] = arr1[i] + c;
	}
	for (int i = 0; i < n; i++) {
		cnt+=solve(arr1[i], 0, n);
	}
	cout << cnt;
	return 0;
}
2025/1/15 18:16
加载中...