poj 2299(树状数组)
题意:求QuickSort最坏情况下的交换次数。理解以后知道应该是一个求序列的逆序对问题。#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define max 1000001
long long tree[max];
long long x[max];
long long getsum(long long idx)
{
long long sum=0;
while(idx>0)
{
sum+=tree[idx];
idx-=(idx&-idx);
}
return sum;
}
void add(long long idx)
{
while(idx<=max)
{
tree[idx]+=1;
idx+=(idx&-idx);
}
}
int main()
{
long long n,i;
while(scanf("%lld",&n)!=EOF)
{
memset(tree,0,sizeof(tree));
if(n==0) return 0;
long long a=0;
for(i=1;i<=n;i++)
{
scanf("%lld",&x[i]);
x[i]++;
}
for(i=n;i;i--)
{
a+=getsum(x[i]);
add(x[i]);
}
printf("%lld\n",a);
}
}
posted on 2011-06-05 16:49 thinking001 阅读(138) 评论(0) 收藏 举报
浙公网安备 33010602011771号