题目
人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。
输入格式
第一行输入一个整数 n,表示鱼的数目。
第二行内输入 n 个整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度。
输出格式
行内输出 n 个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。
输入输出样例
输入
6 4 3 0 5 1 2
输出
0 0 0 3 1 2
说明/提示
对于 100% 的数据,n≤100。
蒟蒻答案
#include <stdio.h>
#include <string.h>
int main()
{
int n
;
int i
,j
;
int num
=0;
scanf("%d",&n
);
int fish
[105];
for (i
=0;i
<n
;i
++){
scanf("%d",&fish
[i
]);
for (j
=0;j
<i
;j
++){
if (fish
[j
]<fish
[i
]){
num
++;
}
}
printf("%d ",num
);
num
=0;
}
return 0;
}
神犇答案
#include<stdio.h>
int n
;
int treearray
[101];
int lowbit(int x
)
{
return x
&(-x
);
}
void add(int x
)
{
while (x
<= 100)
{
treearray
[x
]++;
x
+= lowbit(x
);
}
}
int sum(int x
)
{
int ans
= 0;
while (x
> 0)
{
ans
+= treearray
[x
];
x
-= lowbit(x
);
}
return ans
;
}
int main()
{
int i
;
int x
;
for (i
= 0; i
< 101; i
++)
{
treearray
[i
] = 0;
}
scanf("%d", &n
);
for (i
= 0; i
< n
; i
++)
{
scanf("%d", &x
);
if (i
== 0)
printf("%d", sum(x
));
else
printf(" %d", sum(x
));
add(x
+1);
}
printf("\n");
return 0;
}