Time Limit Exceeded 求逆序对数。

Posted 天道酬勤007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Time Limit Exceeded 求逆序对数。相关的知识,希望对你有一定的参考价值。

/**
题目:Time Limit Exceeded
链接:https://oj.ejq.me/problem/28
题意:求逆序对数。
思路:树状数组求逆序对数。维护前面有多少个<=当前数的数的个数。
*/
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn = 1e6+10;
const int mod = 1e9+7;
ll c[maxn];
int flag[maxn];
int n;
int a[maxn];
int lowbit(int t)
{
    return t&(-t);
}
ll getSum(int pos)
{
    ll sum = 0;
    while(pos>0){
        sum += c[pos];
        pos -= lowbit(pos);
    }
    return sum;
}
void update(int pos,int add)
{
    while(pos<=n){
        c[pos]+=add;
        pos += lowbit(pos);
    }
}
int main()
{
    while(scanf("%d",&n)==1)
    {
        memset(flag, 0, sizeof flag);
        for(int i = 1; i <= n; i++){
            scanf("%d",&a[i]);
            flag[a[i]] = 1;
        }
        int index = 1;///树状数组从1开始。
        for(int i = 0; i <= 1000000; i++){
            if(flag[i]){
                flag[i] = index++;
            }
        }
        memset(c, 0, sizeof c);
        ll ans = 0;
        for(int i = 1; i <= n; i++){
            ans += i-1-getSum(flag[a[i]]);
            update(flag[a[i]],1);
        }
        printf("%lld\n",ans);
    }
    return 0;
}

 

以上是关于Time Limit Exceeded 求逆序对数。的主要内容,如果未能解决你的问题,请参考以下文章

[Time Limit Exceeded]Quoit Design

Time Limit Exceeded的原因及避免方法

C语言编程Time Limit Exceeded问题

python3OJ 1001 487-3279 Time Limit Exceeded

spark 读取mongodb失败,报executor time out 和GC overhead limit exceeded 异常

给逆序对数求原数组