码迷,mamicode.com
首页 > 编程语言 > 详细

逆序对模板(树状数组)

时间:2019-10-29 19:42:45      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:get   树状   int   树状数组   ++   mes   div   amp   cout   

//P1908 逆序对
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mxn=5e5+5;
int a[mxn],c[mxn],b[mxn],f[mxn];
int n;
inline int lowbit(int x){
    return x&-x;
}
inline ll get(int x){
    ll sum=0;
    for(;x;x-=lowbit(x)){
        sum+=c[x];
    }
    return sum;
}
inline void motify(int x,int y){
    for(;x<=n;x+=lowbit(x)){
        c[x]+=y;
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        b[i]=a[i]; 
    }
    sort(b+1,b+n+1);
    int N=unique(b+1,b+n+1)-b-1;
    for(int i=1;i<=n;i++){
        a[i]=lower_bound(b+1,b+N+1,a[i])-b; 
    }
    for(int i=1;i<=n;i++){
        motify(a[i],1);
        f[i]=i-get(a[i]);
    }
    ll ans=0;
    for(int i=1;i<=n;i++){
        ans+=f[i];
    }
    cout<<ans;
    return 0;
}

 

逆序对模板(树状数组)

标签:get   树状   int   树状数组   ++   mes   div   amp   cout   

原文地址:https://www.cnblogs.com/duojiaming/p/11760790.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!