zoukankan      html  css  js  c++  java
  • 【模板】树状数组求逆序对

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=100010;
    int a[maxn],b[maxn],t[maxn],n,ans;
    void read(int &k){
    	k=0; int f=1; char c=getchar();
    	while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
    	while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
    	k*=f; 
    }
    void add(int x){for(;x<=n;x+=(x&-x)) t[x]++;}			//树状数组 
    int query(int x){int ret=0; for(;x>0;x-=(x&-x)) ret+=t[x]; return ret;}
    int main(){
    	read(n);
    	for (int i=1;i<=n;i++) read(a[i]),b[i]=a[i]; int N=n;		//离散化 
    	sort(b+1,b+N+1); N=unique(b+1,b+1+n)-b-1;
    	for (int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+N,a[i])-b;
    	for (int i=1;i<=n;i++) ans+=query(a[i]),add(a[i]);		//查询比a[i]小的数的个数,并加入a[i] 
    	return printf("%d
    ",n*(n-1)/2-ans),0;
    }
    

      

  • 相关阅读:
    html 问题
    bookshelf
    requireJS 用法
    autoprefixer
    移动端 代码块
    D3 学习资源
    折线图
    iscroll 4 下拉 上拉 加载
    iscroll
    重金悬赏的微软:提交Win8漏洞以及发布Win8应用
  • 原文地址:https://www.cnblogs.com/DriverLao/p/7778987.html
Copyright © 2011-2022 走看看