1 solutions
-
0
C++ :
#include <iostream> #include <string> using namespace std; int nums[100000]; int left_num[200000]; int right_num[200000]; int main(void) { int count = 0; int mid = 0; int pos = 0; //中位数的下标 int res = 0; cin >> count >> mid; for (int i = 0; i < count; i++) { int temp; cin >> temp; if (temp > mid) nums[i] = 1; else if (temp < mid) nums[i] = -1; else { nums[i] = 0; pos = i; } } int sum = 0; left_num[count] = right_num[count] = 1; for (int i = pos - 1; i >= 0; i--) { sum += nums[i]; left_num[count + sum] += 1; } sum = 0; for (int i = pos + 1; i < count; i++) { sum += nums[i]; right_num[count + sum] += 1; } for (int i = - count; i <= count; i++) { res += left_num[count + i] * right_num[count - i]; } cout << res << endl; system("pause"); return 0; }
- 1
Information
- ID
- 16854
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By