我竟然把中位数当成了平均数来算……
最后几组样例卡时间用map会超时,用数组的话尽量开的大一些(2倍反正是够了)
#include<stdio.h>
#include<string.h>
int main()
{
int n,cnt[8005<<1];
while(scanf("%d",&n)!=EOF)
{
int an[8005]={0};
for(int i=1;i<=n;i++)
{
scanf("%d",&an[i]);
}
for(int i=1;i<=n;i++)
{
int ans,pos=0;
memset(cnt,0,sizeof(cnt));
cnt[8005]++;
for(int j=i-1;j>0;j--)
{
if(an[j]>an[i])
pos++;
else if(an[j]<an[i])
pos--;
cnt[8005+pos]++;
}
ans=cnt[8005];
pos=0;
for(int j=i+1;j<=n;j++)
{
if(an[j]>an[i])
pos++;
else if(an[j]<an[i])
pos--;
ans+=cnt[8005-pos];
}
printf("%d",ans);
if(i!=n)
putchar(' ');
else
putchar('\n');
}
}
return 0;
}