wrong了好多吧,注意边界
#include<iostream> #include<cstring> #include <cstdio> #include<string> #include<queue> #include<vector> #include<map> #include <set> #include<ctime> #include<cmath> #include <cstdlib> #include<algorithm> #include <iomanip> using namespace std; #define LL __int64 #define N 200100 #define mid 100000 int ar[N],dp[N],hah[N]; int main(){ int T,n,m; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); int id; for(int i=1;i<=n;i++){ scanf("%d",&ar[i]); if(m==ar[i]) id=i; } memset(dp,0,sizeof(dp)); for(int i=id-1;i>0;i--){ dp[i]=dp[i+1]; if(ar[i]<m) dp[i]++; } for(int i=id+1;i<=n;i++){ dp[i]=dp[i-1]; if(ar[i]<m) dp[i]++; } int ans=0; memset(hah,0,sizeof(hah)); int x=((id-1)&1 ? id+1:id); for(int i=x ;i<=n;i+=2){ hah[ dp[i]-(i-x)/2 +mid]++; } for(int i=1;i<=id;i+=2){ ans+=hah[ (x-i)/2-dp[i] +mid]; } memset(hah,0,sizeof(hah)); x=((id-2)&1 ? id+1:id); for(int i=x ;i<=n;i+=2) { hah[ dp[i]-(i-x)/2 +mid]++; } for(int i=2;i<=id;i+=2){ ans+=hah[ (x-i)/2-dp[i] + mid]; } printf("%d\n",ans); } }