码迷,mamicode.com
首页 > 其他好文 > 详细

求逆序对

时间:2017-06-02 11:43:05      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:amp   模板   color   nbsp   blog   方法   int   turn   for   

方法一:树状数组

模板如下:

技术分享
#include<iostream>
#include<cstdio>
#include <algorithm>
using namespace std;
const int MAXN=40001;
int n, a[MAXN], tree[MAXN], tot;

int lowbit(int x) { return x&-x; }


int query(int x) {
    int ans=0;
    while (x>0) {
        ans+=tree[x];
        x-=lowbit(x);
    }
    return ans;
}

void addz(int x) {
    while (x<=n) {
        tree[x]+=1;
        x+=lowbit(x);
    }
    return;
}

struct Node {
    int v, ord;
    bool operator < (const Node x) const { return v<x.v; }
}node[MAXN];

int main() {
    scanf("%d", &n);
    for (int i=1; i<=n; i++) {
        scanf("%d", &node[i].v);
        node[i].ord=i;
    }
    sort(node+1, node+n+1 );
    for (int i=1; i<=n; i++) a[node[i].ord]=i;
    for (int i=1; i<=n; i++) {
        addz(a[i]);
        tot+=i-query(a[i]); 
    }
    printf("%d", tot);
  return 0;
}
View Code

 

求逆序对

标签:amp   模板   color   nbsp   blog   方法   int   turn   for   

原文地址:http://www.cnblogs.com/zjzj/p/6931919.html

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