hdu5701
题目:给你一个乱序的序列,问它现在所在区间是否为中位数,如果是,那么这样的区间有几个。
思路:位置i有一个数是a[i],现在只向左遍历这个区间如果如果比它打和比它小的一样多,那么ans++,那么只向右遍历也是这样。如果向两边遍历,想遍历完一边,再遍历另一边,如果另的一边比a[i]小的和那边比a[i]大的一样多,那么就会ans++。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
const int maxn=8005;
int a[maxn];
int has[maxn*2];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
{
memset(has,0,sizeof(has));
has[8000]++;
int ans=0,cnt=0;
for(int j=i-1;j>=0;j--)
{
cnt+=a[j]>a[i]?1:-1;
has[cnt+8000]++;
}
ans+=has[8000];
cnt=0;
for(int j=i+1;j<n;j++)
{
cnt+=a[j]<a[i]?1:-1;
ans+=has[cnt+8000];
}
if(i!=n-1)
printf("%d ",ans);
else
printf("%d\n",ans);
}
}
}