zoukankan      html  css  js  c++  java
  • Codeforces 396D

    题意略。

    思路:

    很经典的逆序对计数问题。

    https://blog.csdn.net/v5zsq/article/details/79006684

    这篇博客讲得很好。

    当循环到n的时候,我们需要特殊考虑,因为在循环内,它的贡献为0,所以我们在出循环的时候,还要特殊地加上一个值,也即整体的逆序对个数。

    详见代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const LL mod = 1e9 + 7;
    const int maxn = 1e6 + 5;
    
    int p[maxn],n;
    LL fac[maxn],f[maxn],BIT[maxn];
    
    void init(){
        fac[0] = fac[1] = 1;
        for(LL i = 2;i < maxn;++i){
            fac[i] = i * fac[i - 1] % mod;
            LL C = i * (i - 1) / 2 % mod;
            f[i] = C * C % mod * fac[i - 2] % mod;
        }
    }
    int lowbit(int k){
        return k & -k;
    }
    void add(int pos,LL val){
        while(pos <= n){
            BIT[pos] += val;
            pos += lowbit(pos);
        }
    }
    LL sum(int pos){
        LL ret = 0;
        while(pos > 0){
            ret += BIT[pos];
            pos -= lowbit(pos);
        }
        return ret;
    }
    
    int main(){
        init();
        while(scanf("%d",&n) == 1){
            memset(BIT,0,sizeof(BIT));
            for(int i = 1;i <= n;++i) scanf("%d",&p[i]);
            LL ans = 0,s = 0;
            for(int i = 1;i <= n;++i){
                LL useful = p[i] - 1 - sum(p[i]);
                ans = (ans + s * useful % mod * fac[n - i] % mod) % mod;
                ans = (ans + useful * f[n - i] % mod) % mod;
                ans = (ans + useful * (useful - 1) / 2 % mod * fac[n - i] % mod) % mod;
                s += useful;
                s %= mod;
                add(p[i],1);
            }
            ans = (ans + s) % mod;
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    数组里面为对象根据某一属性排序
    理由<a>标签跳转到对应锚点
    jquery对复选框选中
    Fullcalendar
    es6学习
    vue 关于树杈图问题
    input 复选框样式修改
    GAMES101 作业2
    一份自己iOS 面试题,拿到15K35K,分享出来
    Cesium 一款面向三维地球和地图的,世界级的JavaScript开源产品
  • 原文地址:https://www.cnblogs.com/tiberius/p/9426122.html
Copyright © 2011-2022 走看看