hiho一下 第三十九周(逆序数)

题目连接:点击打开链接

解题思路:

逆序数模板题。注意此题坑点在于数据大,开成unsigned long long

完整代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <complex>
#include <cstdio>
#include <string>
#include <cmath>
#include <queue>
using namespace std;
typedef unsigned long long LL;
const int MOD = int(1e9)+7;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-9;
const double PI = acos(-1.0); //M_PI;

const int maxn = 2000001;
int n;
LL p[maxn] , t[maxn] , ans;

void merge(int first , int last)
{
    int mid = (first + last) / 2;
    int i1 = 0 , i2 = first , i3 = mid + 1;
    while(i2 <= mid && i3 <= last)
    {
        if(p[i2] > p[i3])
        {
            t[i1 ++] = p[i3 ++];
            ans += mid - i2 + 1;
        }
        else
            t[i1 ++] = p[i2 ++];
    }
    while(i2 <= mid)    t[i1 ++] = p[i2 ++];
    while(i3 <= last)   t[i1 ++] = p[i3 ++];
    i1 = first;
    i2 = 0;
    while(i2 < last - first + 1)
        p[i1 ++] = t[i2 ++];
}

void merge_sort(int first , int last)
{
    if(first < last)
    {
        int mid = (last + first) / 2;
        merge_sort(first , mid);
        merge_sort(mid + 1 , last);
        merge(first , last);
    }
}

int main()
{
    #ifdef DoubleQ
    freopen("in.txt","r",stdin);
    #endif
    while(cin >> n)
    {
        ans = 0;
        memset(p , 0 , sizeof(p));
        memset(t , 0 , sizeof(t));
        for(int i = 0 ; i < n ; i ++)
        {
            cin >> p[i];
        }
        merge_sort(0 , n - 1);
        cout << ans << endl;
    }
    return 0;
}
时间: 2024-08-06 06:06:35

hiho一下 第三十九周(逆序数)的相关文章

hiho一下 第三十九周 归并排序求逆序数

题目链接:http://hihocoder.com/contest/hiho39/problem/1 ,归并排序求逆序数. 其实这道题也是可以用树状数组来做的,不过数据都比较大,所以要离散化预处理一下,文中也会给出离散化+树状数组的解法,不过要比归并排序慢一点. 算法: 还是按照题中给的解法. 我们来看一个归并排序的过程: 给定的数组为[2, 4, 5, 3, 1],二分后的数组分别为[2, 4, 5], [1, 3],假设我们已经完成了子过程,现在进行到该数组的“并”操作: a: [2, 4,

hiho一下 第五十九周 题目1 : Performance Log

题目1 : Performance Log 时间限制:8000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a txt file, which is performance logs of a single-threaded program. Each line has three columns as follow: [Function Name] [TimeStamp] [Action] [FunctionName] is a string of le

hiho一下 第四十九周 题目1 : 欧拉路&#183;一【无向图 欧拉路问题】

题目1 : 欧拉路·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最后的宝藏.现在他们控制的角色来到了一个很大的湖边.湖上有N个小岛(编号1..N),以及连接小岛的M座木桥.每座木桥上各有一个宝箱,里面似乎装着什么道具. 湖边还有一个船夫,船夫告诉主角.他可以载着主角到任意一个岛上,并且可以从任意一个岛上再载着主角回到湖边,但是主角只有一次来回的机会.同时船夫告诉主

hiho一下 第四十九周(欧拉路的判定)49

/////////////////////////////////////////////////////////////////////////////////////////////////////// 作者:tt267 声明:本文遵循以下协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 转载请注明:http://blog.csdn.net/tt2767/article/details/45420067 ///////////////////

hiho一下 第四十九周 欧拉路&#183;一

[题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最后的宝藏.现在他们控制的角色来到了一个很大的湖边.湖上有N个小岛(编号1..N),以及连接小岛的M座木桥.每座木桥上各有一个宝箱,里面似乎装着什么道具. 湖边还有一个船夫,船夫告诉主角.他可以载着主角到任意一个岛上,并且可以从任意一个岛上再载着主角回到湖边,但是主角只有一次来回的机会

程序员的奋斗史(三十九)——大学断代史(三)——我和知乎邂逅

遥望2011年的某个惶惶岁月,那是我与知乎相识的日子. 排除知乎网站的内测用户,我应该算得上第一批用户.那时知乎网还未开放注册,只能通过好友邀请注册,我费了九牛二虎之力,申请了好几次,才拥有了知乎账号.作为一个真实的问答社区,从近几年的运营来看,知乎是成功的.虽然外界曾质疑知乎网站的盈利模式,但不可否认知乎是伟大的. 众所周知,知乎的原型是国外的Quora.以前一直以为Quora是多么的神圣,直到今年注册并使用后,才发觉知乎在用户体验上一点不逊色于Quora.好的网站当如知乎,简洁美观.操作简便

centos shell编程5LANMP一键安装脚本 第三十九节课

centos shell编程5LANMP一键安装脚本  第三十九节课 上半节课 下半节课 f

NeHe OpenGL教程 第三十九课:物理模拟

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十九课:物理模拟 物理模拟简介: 还记得高中的物理吧,直线运动,自由落体运动,弹簧.在这一课里,我们将创造这一切. 物理模拟介绍 如果你很熟悉物理规律,并且想实现它,这篇文章很适合你. 在这篇教程里,你会创建一个非常简单的物理引

三十九、git add详解

一.前言git add命令主要用于把我们要提交的文件的信息添加到索引库中.当我们使用git commit时,git将依据索引库中的内容来进行文件的提交.二.基本git add <path>表示 add to index only files created or modified and not those deleted 我通常是通过git add <path>的形式把我们<path>添加到索引库中,<path>可以是文件也可以是目录.git不仅能判断出&