Handsome Swap(0443)

Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 89 Accepted: 20 Accepted
 
问题描述
所谓HandSome Swap是指对一串给定的数字,每次交换相临的元素(如 3 2 4 ,只能交换3 2 或2 4 而不能交换3 4),直到最终将这串数字变为升序排列。现在,你要做的就是计算用HandSome Swap将一堆数字变为升序所需的最小次数。
 
输入
只包含一个case.第一行为这堆数的个数N(0 < N < 1000000),下面跟着N行数据,每行代表一个数字ni,(0 < ni < 100000000). 
 
输出
输出进行HandSome Swap的次数。 
 
样例输入
3
3
1
2
 
样例输出
2
 
Hint
SCS
 
归并排序 = =
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 1000010
 
int a[maxn];
long ans;
int tmp[maxn];
 
void merge(int s1,int e1,int s2,int e2)
{
    int i=s1,j=s2,k=;
    while(i<=e1 && j<=e2)
    {
        if(a[i]<=a[j])
            tmp[k++]=a[i++];
        else
        {
            tmp[k++]=a[j++];
            ans+=e1-i+;
        }
    }
    while(i<=e1) tmp[k++]=a[i++];
    while(j<=e2) tmp[k++]=a[j++]; //复制表中剩下部分
    for(i=s1;i<=e2;i++) //复制回去
    {
        a[i]=tmp[i-s1];
    }
}
void merge_sort(int low,int high)
{
    if(low<high)
    {
        int mid=(low+high)/;    
        merge_sort(low,mid);       //后半部分
        merge_sort(mid+,high);    //前半部分
        merge(low,mid,mid+,high); //各并表
    }
}
int main()
{
    int n,i;
    ans=;
    scanf("%d",&n);
    for(i=;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    merge_sort(,n-);
    printf("%ld\n",ans);
    return ;
}

[swustoj 443] Handsome Swap的更多相关文章

  1. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  2. IIS服务器多域名证书绑定443端口解决方案

    一个服务器IIS要绑定多个HTTPS站点(该方法在此之前,有进行测试其他网站域名的ssl证书,测试没有问题) 默认情况一个服务器的IIS只能绑定一个HTTPS也就是443端口 要实现多个站点对应HTT ...

  3. LVM 管理减少swap分区空间增加到根分区

    简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现 ...

  4. [LeetCode] Swap Nodes in Pairs 成对交换节点

    Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...

  5. 如何在Linux上使用文件作为内存交换区(Swap Area)

    交换区域(Swap Area)有什么作用? 交换分区是操作系统在内存不足(或内存较低)时的一种补充.通俗的说,如果说内存是汽油,内存条就相当于油箱,交换区域则相当于备用油箱. Ubuntu Linux ...

  6. 解决apache 443端口被占用

    检测 错误 httpd.exe -w -n "apache" -k start , 进入Apache的安装目录, 搜索httpd-ssl.conf,httpd-ahssl.conf ...

  7. XOR Swap

    swap(a, b): a ^= b b ^= a a ^= b 先明确一下,a ^ a = 0,同时对于一切数x ^ 0 = x 可以这样理解,第三行: b ^= a b ^= a ^ b b = ...

  8. 疑难问题解决备忘录(2)——ubuntu12.04分配swap

    分配swapdd if=/dev/zero of=Swap.disk bs=1M count=6k (count=1k创建1G的Swap,如果要创建6G则count=6k:这步比较慢) 创建swap文 ...

  9. Linux上的free命令详解、swap机制

    Linux上的free命令详解   解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free ...

随机推荐

  1. HTML5入门篇

    ---- HTML5简介 HTML5 是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML 标准版本,现在仍处于发展阶段,但大部分浏览器已经支持某些 HTML5 ...

  2. 安装eclipse中文汉化包后无法打开eclipse

    通过在线安装中文汉化包后一直提示无法启动程序在.log中查看日志 !SESSION 2016-01-15 11:22:57.959 ---------------------------------- ...

  3. 【转】C#中没有id 没有name C#怎么点击按钮

    HTML按钮元素 <input type="submit" value="确定" class="dialogbtn" C# 执行代码 ...

  4. linux磁盘设备知识

    linux分区数字编号: 1.分区数字编号1至4留给主分区或扩展分区使用,逻辑分区编号从5开始. 2.IDE硬盘设备名均以/dev/hd开头,不同硬盘编号依次是/dev/hda/./dev/hdb./ ...

  5. [转]利用/*+Ordered*/提高查询性能

    [转]利用/*+Ordered*/提高查询性能 2009-02-06 10:46:27|  分类: Oracle |  标签: |字号大中小 订阅  消耗在准备利用Oracle执行计划机制提高查询性能 ...

  6. Git权威指南 读笔(2)

    第七章 Git重置: Git提供了一个挽救机制,通过.git/logs目录下日志文件记录了分支的变更. master分支的日志文件.git/logs/refs/heads/master,显示最后5行: ...

  7. add a path cgi-bin to asp.net mvc

    1.简单,但是会丢失请求数据 protected void Application_BeginRequest() { string url = HttpContext.Current.Request. ...

  8. Quartz Sheduler 入门

    Quartz Sheduler 入门 原文地址:http://www.quartz-scheduler.org/generated/2.2.2/html/qtz-all/ 下载地址:http://qu ...

  9. Memcached(六)Memcached的并发实例

    package com.sinosuperman.memcached; import java.io.IOException; import java.net.InetSocketAddress; i ...

  10. 使用.net 的Chart控件绘制曲线图

    在进行软件开发过程中我们可能会碰到需要生成图表的情况,在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你 ...