sort it 树状数组+逆序对
Posted xxrll
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sort it 树状数组+逆序对相关的知识,希望对你有一定的参考价值。
sum[i]是1-i所有1的和,而i-sum[a[i]]就是在a[i]后面的数,即在i之前出现,却比他大的数。1是加在a[i]上,即i实际应该放的位置。而c[i]是为sum做准备的
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include<stdlib.h> 6 #include<algorithm> 7 #include<queue> 8 #include<vector> 9 #include<string> 10 #include<set> 11 #include<cctype> 12 #include<sstream> 13 #define mem(a) memset(a,0,sizeof(a)) 14 #define LL long long 15 using namespace std; 16 const int N=1e6+5; 17 int a[N],c[N],n; 18 int lowbit(int x) 19 { 20 return x&-x; 21 } 22 void add(int x,int a) 23 { 24 while(x<=n) c[x]+=a,x+=lowbit(x); 25 } 26 int sum(int x) 27 { 28 int ans=0; 29 while(x) 30 { 31 ans+=c[x]; 32 x-=lowbit(x); 33 } 34 return ans; 35 } 36 int main() 37 { 38 while(~scanf("%d",&n)) 39 { 40 mem(c); 41 int ans=0; 42 for(int i=1;i<=n;i++) 43 { 44 scanf("%d",&a[i]); 45 add(a[i],1); 46 ans+=i-sum(a[i]); 47 } 48 printf("%d ",ans); 49 } 50 return 0; 51 }
以上是关于sort it 树状数组+逆序对的主要内容,如果未能解决你的问题,请参考以下文章