[求助]请大家帮我看看这个程序
我这有个 测试是不是逆序数的程序,可是我有的地方看不懂,请大家帮我分析下,我先这在谢谢了!在线性代数里有这么一个概念:有一个数列,如21543,
1的前面有1个数比它要大,4的前面有1个数比它大,
3的前面有2个数比它大,总数是1+1+2=4
所以21543的逆序数就是4
#include <cstdio>
int main()
{
while(!scanf("%*d\n"))
{
// int c, i;
int s = 0, t, buf[256 * 2] = {0};
int *mipmap[] = {buf + 2, buf + 4, buf + 8, buf + 16, buf + 32, buf + 64, buf + 128, buf + 256};//这为什么这么定义?
while((t = getchar()) != '\n')
{
mipmap[7][t]++, t & 1 || (s += mipmap[7][t + 1]), t >>= 1;//这是什么意思?
mipmap[6][t]++, t & 1 || (s += mipmap[6][t + 1]), t >>= 1;
mipmap[5][t]++, t & 1 || (s += mipmap[5][t + 1]), t >>= 1;
mipmap[4][t]++, t & 1 || (s += mipmap[4][t + 1]), t >>= 1;
mipmap[3][t]++, t & 1 || (s += mipmap[3][t + 1]), t >>= 1;
mipmap[2][t]++, t & 1 || (s += mipmap[2][t + 1]), t >>= 1;
mipmap[1][t]++, t & 1 || (s += mipmap[1][t + 1]), t >>= 1;
mipmap[0][t]++, t & 1 || (s += mipmap[0][t + 1]);
/*
for (t = c, i = 0; i < 8; i++, t >>= 1)
{
mipmap[7 - i][t]++;
if (0 == (t & 1))
s += mipmap[7 - i][t + 1];
}
*/
}
printf("%d\n", s);
}
return 0;
}