【树状数组+简单题】杭电 hdu 2689 Sort it

/* THE PROGRAM IS MADE BY PYY */
/*----------------------------------------------------------------------------//
    Copyright (c) 2011 panyanyany All rights reserved.

    URL   : http://acm.hdu.edu.cn/showproblem.php?pid=2689
    Name  : 2689 Sort it

    Date  : Saturday, October 8, 2011
    Time Stage : half an hour

    Result: 
4722905	2011-10-08 21:19:56	Accepted	2689
15MS	240K	1078 B
C++	pyy


Test Data :

Review :
果然是比较水的题,当然,一开始有点犯蒙,看了下解题报告,
原来是跟逆序数对有关的,自己竟联系不起来,还想着把它们
逐一对换排序呢……
//----------------------------------------------------------------------------*/

#include <stdio.h>
#include <string.h>

#define INF		0x7f7f7f7f

#define MAXSIZE 1010

int n ;
int tree[MAXSIZE] ;

int lowbit (int x)
{
	return x & (-x) ;
}

void add (int pos, int val)
{
	while (pos <= n)
	{
		tree[pos] += val ;
		pos += lowbit (pos) ;
	}
}

int getSum (int pos)
{
	int sum = 0 ;
	while (pos > 0)
	{
		sum += tree[pos] ;
		pos -= lowbit (pos) ;
	}
	return sum ;
}

int main ()
{
	int i, j ;
	int x, sum ;
	while (scanf ("%d", &n) != EOF)
	{
		memset (tree, 0, sizeof (tree)) ;
		sum = 0 ;
		for (i = 1 ; i <= n ; ++i)
		{
			scanf ("%d", &x) ;
			sum += getSum (n) - getSum (x) ;
			add (x, 1) ;
		}
		printf ("%d\n", sum) ;
	}
	return 0 ;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码的安徒生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值