思路

首先找到这个数字 , 然后以这个数字为轴, 左右尝试扩展区间
方便起见, 可以把这个数字设置为 0 ,比他大的设置为1 , 比他小的设置成-1
(自己比较也一样的)
然后就可以以这个点为中心, 开始左右区间进行枚举
[-------left------------b-------------right---------------]
一开始枚举左边区间, 统计比他大的数字1和比他小的数字-1, 如果一样, 则增加这个区间ans ++ 同理可以枚举右边区间,和左边区间一样的思路

然后是左右区间, 要枚举左边的和右边的 统计1 和 -1的数字一样 这里需要用一个数组记录一下, val[ left - n - right] 记录1的个数和-1的个数的差值的个数

如果 val[n-x] == val [n + x ] 那么也记录这个区间在内
上述过程可以合并一下

ac 代码

#include<bits/stdc++.h>
using namespace std;
const int N =1e6+10;
int a[N] , val[N<<1];
int main()
{
    int n , b ;
    cin >> n >> b;
    int pos;
    for(int i = 1 ;i<=n;i++)
    {
        int x ; cin >> x;
        if (x > b) a[i] = 1;
        else if (x < b) a[i] = -1;
        else pos = i; 
    }
    int sm = 0;
    int ans = 0 ;
    for(int i = pos - 1; 1<=i; i--)
    {
        sm += a[i];
        val [n - sm]++ ;
        if (sm == 0) ans ++; 
    }
    sm = 0;
    for (int i = pos + 1; i <= n ;i++)
    {
        sm +=a[i];
        ans += val [n+sm] ; // 和 左边配对的情况
        if (sm == 0) ans ++ ; // 右边单独配对的情况
    }
    cout << ans +  1 ; // 自己单独也算一种情况
    return 0;
}