poj--2299(树状数组+离散化)

Posted 2018zxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj--2299(树状数组+离散化)相关的知识,希望对你有一定的参考价值。

一、离散化:

https://www.cnblogs.com/2018zxy/p/10104393.html

 

二、逆序数

 

AC代码:

技术分享图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn = 510000;
struct Node{
    LL data;
    int val;
}cur[maxn];
LL a[maxn];
bool cmp(Node A,Node B)
{
    return A.data<B.data;
}
int lowbit(int x)
{
    return x&(-x);
}
void update(int x)
{
    while(x<maxn-10)
    {
        a[x]++;
        x+=lowbit(x);
    }
}
int sum(int x)
{
    int ans=0;
    while(x>0)
    {
        ans+=a[x];
        x-=lowbit(x);
    }
    return ans;
}
int main(void)
{
    int n,i;
    while(~scanf("%d",&n)&&n)
    {
        memset(a,0,sizeof(a));
        for(i=1;i<=n;i++)
        {
            scanf("%lld",&cur[i].data);cur[i].val=i;
        }
        sort(cur+1,cur+1+n,cmp);
        LL ans=0;
        for(i=1;i<=n;i++)
        {
            update(cur[i].val);
            ans+=i-sum(cur[i].val);
        }
        printf("%lld
",ans);
    }
    return 0;
}
View Code

 

技术分享图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn = 510000;
struct Node{
    LL data;
    int val;
}cur[maxn];
LL a[maxn];
bool cmp(Node A,Node B)
{
    return A.data<B.data;
}
int lowbit(int x)
{
    return x&(-x);
}
void update(int x)
{
    while(x<maxn-10)
    {
        a[x]++;
        x+=lowbit(x);
    }
}
int sum(int x)
{
    int ans=0;
    while(x>0)
    {
        ans+=a[x];
        x-=lowbit(x);
    }
    return ans;
}
int main(void)
{
    int n,i;
    while(~scanf("%d",&n)&&n)
    {
        memset(a,0,sizeof(a));
        for(i=1;i<=n;i++)
        {
            scanf("%lld",&cur[i].data);cur[i].val=i;
        }
        sort(cur+1,cur+1+n,cmp);
        LL ans=0;
        for(i=n;i>=1;i--)
        {
            ans+=sum(cur[i].val);
            update(cur[i].val);
        }
        printf("%lld
",ans);
    }
    return 0;
}
View Code

以上是关于poj--2299(树状数组+离散化)的主要内容,如果未能解决你的问题,请参考以下文章

Poj 2299 - Ultra-QuickSort 离散化,树状数组,逆序对

poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)

POJ 2299 Ultra-QuickSort (树状数组+离散化 求逆序数)

Ultra-QuickSort(树状数组+离散化) POJ - 2299

POJ 2299 Ultra-QuickSort (树状数组 && 离散化)

POJ 2299 Ultra-QuickSort (树状数组 && 离散化&&逆序)