只有第三题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;
}
求助