poj 2299 Ultra-QuickSort 逆序对模版题

用树状数组求逆序数 唯一的坑点就是sum要用long long存 直接贴代码了 以后忘了还能直接看 2333……

PS:和hdu3743代码是一样的,因为两个都是逆序对模版题……

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 int s[500005];
 6 int N;
 7 struct num{
 8     int xuhao,num;
 9 }nu[500005];
10 int qufan(int i){
11     return i&(-i);
12 }
13 int cmp(num nu1,num nu2){
14     return nu1.num<nu2.num;
15 }
16 int summ(int a){
17     int sum=0;
18     while(a>0){
19         sum+=s[a];
20         a-=qufan(a);
21     }
22     return sum;
23 }
24 void haha(int n,int x){
25     while(x<=n){
26         s[x]++;
27         x+=qufan(x);
28     }
29 }
30 int main(){
31     int n;
32     while(~scanf("%d",&n)&&n){
33         for(int i=1;i<=n;i++){
34             scanf("%d",&nu[i].num);
35             nu[i].xuhao=i;
36         }
37         sort(nu+1,nu+n+1,cmp);
38         long long sum=0;
39         for(int i=n;i>=1;i--){
40             sum+=summ(nu[i].xuhao);
41             haha(n,nu[i].xuhao);
42         }
43         printf("%lld\n",sum);
44         memset(s,0,sizeof(s));
45     }
46     return 0;
47 }

 

posted @ 2016-03-19 08:23  良将ℓ  阅读(175)  评论(0编辑  收藏  举报