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. [getLongestLength] 加和为0的最长子串长度

    点击这里查看原文 假设一个数组仅仅由1和-1组成,求该数组的和为0的最长子串的长度. 例如: {1,-1,1,-1,1,1,1} 输出:4. 昨天机试的时候做到这道题,不会做,今天思考一下. 普通的解 ...

  2. I/O继承关系图

    InputStream/OutputStream继承关系图

  3. OpenJudge/Poj 1125 Stockbroker Grapevine

    1.链接地址: http://poj.org/problem?id=1125 http://bailian.openjudge.cn/practice/1125 2.题目: Stockbroker G ...

  4. <<深入Java虚拟机>>-第二章-Java内存区域-学习笔记

    Java运行时内存区域 Java虚拟机在运行Java程序的时候会将它所管理的内存区域划分为多个不同的区域.每个区域都有自己的用途,创建以及销毁的时间.有的随着虚拟机的启动而存在,有的则是依赖用户线程来 ...

  5. mysql远程访问的权限

    1.改表法 mysql>use mysql; mysql>update user set host = '%' where user = 'root'; 2.授权法 例如,你想myuser ...

  6. 支付宝api教程,支付宝根据交易号自动充值

    最近公司要用php做一个网站支付宝自动充值的功能,具体就是客户把钱直接转到公司的支付宝账号里,然后在我们网站上填写上交易号,我们网站程序自动获取交易信息,自动给网站的账户充值. 我的具体想法就是利用支 ...

  7. 【转】MSSQL获取指定表的列名信息,描述,数据类型,长度

    /* --作用:根据特定的表名查询出字段,以及描述,数据类型,长度,精度,是否自增,是否为空等信息 --作者:wonder QQ:37036846 QQ群:.NET顶级精英群 ID:124766907 ...

  8. jsoup 对网页中图片解析

    Elements article = new Elements(); Elements Img = new Elements(); article = doc.select("div#con ...

  9. 调试NodeJS应用

    OS:Windows 1.下载安装NodeJS 点击http://nodejs.org/界面上“Install”,下载后运行安装,默认安装到到C:\Program Files\nodejs.安装后确认 ...

  10. Python中使用ElementTree解析xml

    在Python中,ElementTree是我们常用的一个解析XML的模块 1.导入ElementTree模块 from xml.etree import ElementTree as ET 2.初始化 ...