• luogu-1908 逆序对 离散化+树状数组


    题目链接:https://www.luogu.org/problem/show?pid=P1908

    题意

    简单的求逆序对

    思路

    用树状数组来做逆序对
    对于过大的数字来讲,用离散化处理即可
    比赛的时候没有想到离散化啊,笨
    还有一点,如果有重复数字出现的话,可以考虑用一个vis数组存下对应元素出现的次数,计数时减掉就好

    代码

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define lowbit(x) ((x)&(-x))
    using namespace std;
    const int maxn=40000;
    struct Item{
        int val, id;
        bool operator < (const Item &a) const{
            return val>a.val;
        }
    }item[maxn+5];
    int n, vis[maxn], tree[maxn+5];
    int sum(int x){
        int ans=0;
        for (int i=x; i>0; i-=lowbit(i))
            ans+=tree[i];
        return ans;
    }
    
    void add(int x, int val){
        for (int i=x; i<=n; i+=lowbit(i))
            tree[i]+=val;
    }
    
    int main(void){
        scanf("%d", &n);
        for (int i=0; i<n; i++){
            scanf("%d", &item[i].val);
            item[i].id=i+1;
        }
        sort(item, item+n);
    
        int ans=0;
        for (int i=0; i<n; i++){
            ans+=sum(item[i].id);
            add(item[i].id, 1);
        }printf("%d
    ", ans);
    
        return 0;
    }
    
    
    Time Memory
    112ms 2273KB
  • 相关阅读:
    docker搭建主从复制mysql
    mysql主从复制(mariadb)
    docker搭建mysql8.0
    docker安装mysql
    终端配置kxsw
    AJAX教程
    移动端常见布局
    css为什么需要精灵图
    元素的显示与隐藏
    css网页布局总结
  • 原文地址:https://www.cnblogs.com/tanglizi/p/8548901.html
Copyright © 2020-2023  润新知