1 条题解

  • 0
    @ 2025-9-9 23:53:25

    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

    信息

    ID
    1590
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者