Attention to detail ah .... A typical mess.
#include <iostream>#include<cstdio>#include<cstring>#include<cmath>#defineMAXN 100500using namespacestd;Long Longn,a[maxn],mx[maxn],mi[maxn],cnta[maxn][3],cntb[maxn][3],regis[4],b,rec;Long Longnum[maxn],kk=0, ans=0;Long LongvvLong Longx) { if(x<0)return-x; returnx;}intMain () {scanf ("%lld%lld",&n,&b); for(Long LongI=1; i<=n;i++) {scanf ("%lld",&A[i]); if(A[I]>B) {mx[i]=mx[i-1]+1; mi[i]=mi[i-1];} Else if(A[I]<B) {mx[i]=mx[i-1];mi[i]=mi[i-1]+1;} Else{rec=i;mx[i]=mx[i-1];mi[i]=mi[i-1];} } for(Long LongI=1; i<=n;i++) { if(i<=rec-1) {Num[i]= (mx[rec-1]-mx[i-1])-(mi[rec]-mi[i-1]); if(VV (num[i]) >kk) kk=VV (num[i]); } Else if(i>=rec+1) {Num[i]= (Mx[i]-mx[rec])-(mi[i]-Mi[rec]); if(VV (num[i]) >kk) kk=VV (num[i]); } } for(Long LongI=1; i<=rec-1; i++) { if(num[i]<0) cntb[-num[i]][1]++; Else if(num[i]>0) cnta[num[i]][1]++; Elseregis[1]++; } for(Long Longi=rec+1; i<=n;i++) { if(num[i]<0) cntb[-num[i]][2]++; Else if(num[i]>0) cnta[num[i]][2]++; Elseregis[2]++; } for(Long LongI=1; i<=kk;i++) {ans+=cnta[i][1]*cntb[i][2]; Ans+=cntb[i][1]*cnta[i][2]; } ans=ans+regis[1]*regis[2]+regis[1]+regis[2]+1; printf ("%lld\n", ans); return 0;}
Bzoj 1303 Median figure