HDU 3743 Frosh Week(归并排序求逆序对)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3743
题目意思就是给你一个长为n的序列,让你求逆序对.我用的是归并排序来求的.归并排序有一个合并的过程,分前后两段,当a[i] > a[j]时,说明a[j]比前面那段啊[i],a[i+1],a[i+2]....,a[mid],比这些都要小,所以总逆序对数要加上mid-i+1.
// File Name: HDU3743.cpp
// Author: xiaxiaosheng
// Created Time: 2015年03月09日 星期一 21时54分45秒 #include<vector>
#include<list>
#include<map>
#include<set>
#include<deque>
#include<stack>
#include<bitset>
#include<algorithm>
#include<functional>
#include<numeric>
#include<utility>
#include<sstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime> using namespace std;
typedef __int64 INT;
const int maxn = 10e6+; int n,A[maxn],temp[maxn];
INT ans;
void merger(int *A,int s,int mid,int e)
{
int k = ,i = s,j = mid+;
while(i <= mid && j <= e)
{
if(A[i] < A[j])
temp[k++] = A[i++];
else
{
ans += (mid-i+);
temp[k++] = A[j++];
}
}
while(i <= mid) temp[k++] = A[i++];
while(j <= e) temp[k++] = A[j++];
for(int i = ;i < k;++i)
A[s+i] = temp[i];
}
void mergersort(int *A,int s,int e)
{
if(s < e)
{
int mid = (s + e) / ;
mergersort(A,s,mid);
mergersort(A,mid+,e);
merger(A,s,mid,e);
} }
int main(){
while(scanf("%d",&n)!=EOF)
{
for(int i = ;i < n;++i)
scanf("%d",&A[i]);
ans = ;
mergersort(A,,n-);
printf("%I64d\n",ans);
}
return ;
}
HDU 3743 Frosh Week(归并排序求逆序对)的更多相关文章
- 2014 HDU多校弟五场A题 【归并排序求逆序对】
这题是2Y,第一次WA贡献给了没有long long 的答案QAQ 题意不难理解,解题方法不难. 先用归并排序求出原串中逆序对的个数然后拿来减去k即可,如果答案小于0,则取0 学习了归并排序求逆序对的 ...
- 归并排序&&归并排序求逆序对
归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序 ...
- 【BZOJ4769】超级贞鱼 归并排序求逆序对
[BZOJ4769]超级贞鱼 Description 马达加斯加贞鱼是一种神奇的双脚贞鱼,它们把自己的智慧写在脚上——每只贞鱼的左脚和右脚上各有一个数.有一天,K只贞鱼兴致来潮,排成一列,从左到右第i ...
- poj2299(归并排序求逆序对)
题目链接:https://vjudge.net/problem/POJ-2299 题意:给定一个序列,每次只能交换邻近的两个元素,问要交换多少次才能使序列按升序排列. 思路:本质就是求逆序对.我们用归 ...
- 归并排序+归并排序求逆序对(例题P1908)
归并排序(merge sort) 顾名思义,这是一种排序算法,时间复杂度为O(nlogn),时间复杂度上和快排一样 归并排序是分治思想的应用,我们先将n个数不断地二分,最后得到n个长度为1的区间,显然 ...
- 归并排序求逆序对(poj 2299)
归并排序求逆序对 题目大意 给你多个序列,让你求出每个序列中逆序对的数量. 输入:每组数据以一个数 n 开头,以下n行,每行一个数字,代表这个序列: 输出:对于输出对应该组数据的逆序对的数量: 顺便在 ...
- 浙江工商大学15年校赛I题 Inversion 【归并排序求逆序对】
Inversion Time Limit 1s Memory Limit 131072KB Judge Program Standard Ratio(Solve/Submit) 15.00%(3/20 ...
- 归并排序(归并排序求逆序对数)--16--归并排序--Leetcode面试题51.数组中的逆序对
面试题51. 数组中的逆序对 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出 ...
- hdu 4911 Inversion(归并排序求逆序对数)2014多校训练第5场
Inversion Time Limit: 20 ...
随机推荐
- POJ2528Mayor's posters(离散化 + 线段树)
题目链接: 题意:给定一些高度都相同的海报去贴,问最后能看见几张海报 The picture below illustrates the case of the sample input. { 8,9 ...
- Form Submit表单提交
<button type="button" ng-click="submit()"class="btn btn-block btn-danger ...
- JQuery------动态添加的元素on方法不起作用解决方法
转载: http://www.jb51.net/article/70342.htm
- C#------对SQLServer进行简单的增,删,改,查
EF中的操作转载: http://www.cnblogs.com/mcgrady/archive/2015/03/21/4355282.html PSContext db = new PSContex ...
- 自然语言9_NLTK计算中文高频词
以下代码仅限于python2 NLTK计算中文高频词 >>> sinica_fd=nltk.FreqDist(sinica_treebank.words()) >>> ...
- jquery serialize()方法可以序列化表单值为字符串
<form> <div><input type="text" name="a" value="1" id=&q ...
- SublimeText2使用笔记
将Sublime Text2 加入右键菜单(转) 1. 运行中输入 regedit 打开注册表 2. 在HKEY_CLASSES_ROOT/*/shell/ 下新建’项’ ,名称自己觉得.我用的是Su ...
- Oracle数据库管理系统下对数据库操作常用命令
desc表名; /*查看表结构*/ alter table ...
- virtualbox中centos系统配置nat+host only上网
以前一直使用的是virtualbox的桥接模式,桥接模式的特点: 虚拟机和宿主机处于同等地位,就像是一台真实主机一样存在于局域网中,可以分配到一个网络中独立的IP. 虚拟机和宿主机之间能够互访. 如果 ...
- javascript生成二维码
参考: http://www.w3dev.cn/article/20140617/javascript-create-QR-code.aspx