标签:int 图片 ring none stream hid cto nbsp 准备
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\n",ans); 49 } 50 return 0; 51 }
标签:int 图片 ring none stream hid cto nbsp 准备
原文地址:https://www.cnblogs.com/XXrll/p/10305404.html