1 solutions

  • 0
    @ 2025-11-5 15:29:46

    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