HYSBZ - 1303

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=100000+100;
int a[maxn];
int l[maxn*2],r[maxn*2];
int sum[maxn];
int n,b;
int ans;
int main()
{

while(~scanf("%d%d",&n,&b))
{
ans=0;
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
memset(sum,0,sizeof(sum));
int num;
int id;
for(int i=1; i<=n; i++)
{
scanf("%d",&num);
if(num>b) a[i]=1;//比b大的为1
else if(num==b)
{
a[i]=0;//相等为0
id=i;
}
else a[i]=-1;//比b小的为-1
}
l[n]=1;
r[n]=1;
for(int i=id-1; i>=1; i--)
{
sum[i]=sum[i+1]+a[i];
l[sum[i]+n]++;//统计b前缀和的出现的次数
}
for(int i=id+1; i<=n; i++)
{
sum[i]=sum[i-1]+a[i];
r[sum[i]+n]++;//统计b后缀和的出现的次数
}
for(int i=1;i<=2*n-1;i++)
{
ans+=l[i]*r[2*n-i];//和为0的前后缀和的数量进行组合
}
printf("%d\n",ans);
}
return 0;
}

posted on 2017-11-25 12:06  发牌员  阅读(155)  评论(0)    收藏  举报

导航