码迷,mamicode.com
首页 > 其他好文 > 详细

【CF 459D】 Pashmak and Parmida's problem

时间:2015-08-08 19:59:08      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:树状数组

【CF 459D】 Pashmak and Parmida’s problem

预处理+线段树求逆序对 新学了树状数组 很适合这题 来一发

代码如下:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <map>
#include <cstring>
#define ll long long

using namespace std;

map <int,int> mp;

int l[1111111],r[1111111];
int num[1111111];
int tr[1111111];
int sum[1111111];

int Bite(int x)
{
    return (x&(-x));
}

int Getsum(int x)
{
    int s = 0;
    while(x)
    {
        s += sum[x];
        x -= Bite(x);
    }
    return s;
}

void Add(int x,int n)
{
    while(x <= n)
    {
        sum[x]++;
        x += Bite(x);
    }
}

int main()
{
    int n,i,j,mm;
    ll ans = 0;
    scanf("%d",&n);

    mm = 0;
    for(i = 0; i < n; ++i)
    {
        scanf("%d",&num[i]);
        mp[num[i]]++;
        l[i] = mp[num[i]];
        mm = max(mm,l[i]);
    }
    mp.clear();
    for(i = n-1; i >= 0; --i)
    {
        mp[num[i]]++;
        r[i] = mp[num[i]];
    }
    memset(sum,0,sizeof(sum));
    for(i = n-1; i > 0; --i )
    {
        Add(r[i],mm);
        ans += Getsum(l[i-1]-1);
    }
    printf("%I64d\n",ans);
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

【CF 459D】 Pashmak and Parmida's problem

标签:树状数组

原文地址:http://blog.csdn.net/challengerrumble/article/details/47360995

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!