比賽的時候絕逼整不出來啊,看了別人的blog,才理解什麼解法
題目給出中位數,求有多少子串也是以m為中尉
思路:找出m的位置sign,然後向前找比m小,cou++,的index[]在相應的位置加一(等向m後面找的時候發現比m大的元素,構成了一個BestCoder Sequence,直接就sum+=index[]),比m大,cou--,也在的index[]在相應的位置加一(這樣就把m前面比m大的數 也加入到准備數組index中,當m後面有比m大的時候sum+=index[],就把m前面比m大的元素也算上了,也構成了一個BestCoder Sequence)
/************************************************************************* > File Name: hdu4908.cpp > Author: yang > Mail:[email protected] > Created Time: 2014年08月17日 星期日 17:11:59 ************************************************************************/ #include#include #include #include using namespace std; #define N 40010 int main(){ int a[N],index[N],mid=N/2; int n,m; while(cin>>n>>m){ int sign; for(int i=1;i<=n;i++){ scanf(%d,&a[i]); if(a[i]==m) sign=i; } int cou=0; memset(index,0,sizeof(index)); for(int i=sign;i>=1;i--){ if(a[i]>m) cou++; if(a[i] m) cou++; if(a[i]