#include<iostream>
using namespace std;
int main(){
int n,b,b1,s1[100010]={0},s3[200010]={0},sumy=0;
cin >> n >> b;
for(int i = 0,s;i<n;i++){
scanf("%d",&s);/*段错误:忘打‘&’*/
if(s > b){
s1[i] = 1;
}else if(s < b){
s1[i] = -1;
}else{
s1[i] = 0;
b1 = i;
}
}
for(int i=b1,sum=0;i>=0;i--){ //左侧,不同的和存在不同的下标(因为有负数,所以下标统一加100000),右侧检索相反数个数会更快
sum+=s1[i];/*段错误:忘令sum=0*/
s3[sum+100000]++;
if(sum==0)sumy++; /*只有左半侧区间和只有b一个数都算 ! ! !*/
}
for(int i = b1+1,sum=0;i<n;i++){ //右侧
sum+=s1[i];
sumy+=s3[-sum+100000];/*段错误:忘加100000*/
}
cout << sumy;
return 0;
}
编写注意点:
1,段错误可能由各种错误引起,如忘加"&",要仔细检查

京公网安备 11010502036488号