题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4908
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<string.h>
#include<cctype>
#include<cstdlib>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<vector>
#include<algorithm>
#include <iomanip>
#include<string>
#define max_ele 8589934592
#define mt(a) memset(a,0,sizeof a)
using namespace std;
typedef long long ll;
int a[60000 + 10] = { 0 };
int kk[40000 + 10] = { 0 };
int main()
{
int n, m;
while (scanf("%d %d",&n,&m)!=EOF)
{
mt(a);
mt(kk);
int flag = 0;
int cot = 0;
int mid = 30000;
int ans = 0;
int kkk = 0;
for (int i = 1; i <= n; i++)
{
int x;
scanf("%d", &kk[i]);
if (kk[i] == m)
{
kkk = i;
}
}
for (int i = kkk; i; i--)
{
if (kk[i] < m)cot--;
else if (kk[i]>m)cot++;
a[mid + cot]++;
}
cot = 0;
for (int i = kkk; i <= n; i++)
{
if (kk[i] > m)cot++;
else if (kk[i] < m)cot--;
ans += a[mid - cot];
}
printf("%d\n", ans);
}
return 0;
}