hdu 2689 sort it
2017-04-18 14:46
411 查看
Sort it
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4487 Accepted Submission(s): 3119
[align=left]Problem Description[/align]
You want to processe a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. Then how many times it need.
For example, 1 2 3 5 4, we only need one operation : swap 5 and 4.
[align=left]Input[/align]
The input consists of a number of test cases. Each case consists of two lines: the first line contains a positive integer n (n <= 1000); the next line contains a permutation of the n integers from 1 to n.
[align=left]Output[/align]
For each case, output the minimum times need to sort it in ascending order on a single line.
[align=left]Sample Input[/align]
3
1 2 3
4
4 3 2 1
[align=left]Sample Output[/align]
0
6
哪个数进入序列 就把他置成1 不是第几个输进来把第几个置成1 而是根据他的数值确定位置 所以建立的树状数组是排好序的 。
答案就是每个数前面比她大的个数和
这个数是i-query(n) i代表是第几个数 n 是这个数的数值。
#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int maxn=1005;
int lowbit(int i)
{
return i&(-i);
}
int a[maxn];
int n;
int update(int i,int b)
{
while(i<=n)
{<
4000
/span>
a[i]+=b;
i+=lowbit(i);
}
}
int query(int i)
{
int sum=0;
while(i>0)
{
sum+=a[i];
i=i-lowbit(i);
}
return sum;
}
int main()
{
while(cin>>n)
{
int ans=0,x;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
update(x,1);
ans+=i-query(x);
}
cout<<ans<<endl;
}
return 0;
}
相关文章推荐
- HDU 2689 Sort it
- HDU_2689_Sort it
- HDU2689 Sort it【树状数组】【逆序数】
- HDU 2689 Sort it(逆序对-BIT)
- hdu 2689 Sort it 一维树状数组的应用
- 【树状数组+简单题】杭电 hdu 2689 Sort it
- HDU 2689 Sort it
- hdu 2689 Sort it
- HDU 2689 Sort it 求逆序数,树状数组实现
- hdu 2689 sort it(树状数组 逆序数)
- hdu 2689 Sort it
- HDU 2689 Sort it(树状数组)(类似逆序数,同样不需要离散化)
- HDU 2689 sort it - from lanshui_Yang
- hdu 2689 Sort it
- HDU2689 Sort it (树状数组求逆序数)
- hdu 2689 Sort it
- HDU 2689 sort it - from lanshui_Yang
- HDU 2689 Sort it
- HDU 2689 Sort it
- HDU 2689 Sort it(树状数组,逆序数)