#594. 求逆序对(deseq)

题目链接:登录 - 沐枫OJ

这题出的很好,它包含了两个算法:递归和二分法。在数据类型上也必须要注意,不然这题就会出错。

我的思路:

#include
using namespace std;
const int MAXN=1e7+7;
long long a[MAXN],b[MAXN];
//递归计算逆序对 
long long f(int l,int r){
    if(l==r){
        return 0;
    }
    int mid=(l+r)/2;
    long long ans=f(l,mid)+f(mid+1,r);
    //用i来遍历b数组 ,j为[l.mid]序号,k为[mid+1,r] 序号,jmid){//[l.mid]范围数据遍历完了,直接添加[mid+1,r]数据 
            b[i]=a[k++];
            continue;

        }
        if(k>r){
            b[i]=a[j++];
            continue;
        }
        if(a[j]>a[k]){
            b[i]=a[k++];
            ans+=mid-j+1;
        }
        else{
            b[i]=a[j++];
            continue;
        }
    }
    for(int i=l;i<=r;i++){
        a[i]=b[i];
    }
    return ans;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    cout<

重点说明:

这题输出的数据是long long类型的奥~

这题输出的数据是long long类型的奥~

这题输出的数据是long long类型的奥~

重点说明了,错了不怪我!

你可能感兴趣的:(例题,c++)