考场想到了正解,但是依旧选择了暴力,这究竟是天意,还是人觉啊!
为了表示内心的惋惜与痛却,还写什么解题思路啊!
找到指定数的位置,算一遍前缀和(如果a[i]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#include<queue>
using namespace std;
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
const int Inf=10000000+10;
int a[100010],s[100010],l[200010],r[200010];
int main(){
int i,j,k,n,m,b,weizhi=0,flag=0;
scanf("%d%d",&n,&b);
for(i=1;i<=n;i++){
int x;
scanf("%d",&x);
if(x==b){
weizhi=i;a[i]=0;
}
else if(x<b)a[i]=-1;
else a[i]=1;
}
l[n]=1;r[n]=1;
for(i=weizhi-1;i>=1;i--){
s[i]=s[i+1]+a[i];l[s[i]+n]++;
}
for(i=weizhi+1;i<=n;i++){
s[i]=s[i-1]+a[i];r[s[i]+n]++;
}
int ans=0;
for(i=0;i<2*n;i++)
ans=ans+l[i]*r[2*n-i];
printf("%d\n",ans);
return 0;
}