首页 > 其他分享 >POJ 2299 Ultra-QuickSort ---归并排序 求逆序

POJ 2299 Ultra-QuickSort ---归并排序 求逆序

时间:2023-09-12 12:36:50浏览次数:41  
标签:2299 int QuickSort 归并 long --- include 500005 逆序


归并排序 的模板。

能求逆序。。。。


#include<stdio.h>
#include<string.h>

int n;
long long a[500005],b[500005];
long long sum;

void merge(int l,int m,int r)
{
	int i=l,j=m+1,k=0;
	while(i<=m && j<=r)
	{
		if(a[i]<=a[j])
			b[k++]=a[i++];
		else{
			b[k++]=a[j++];
			sum+=m-i+1;//这个就能求逆序了。。自己理解一下。。
		}
	}
	while(i<=m)
		b[k++]=a[i++];
	while(j<=r)
		b[k++]=a[j++];
	k=0;
	for(i=l;i<=r;i++)
		a[i]=b[k++];
}
void mergesort(int a,int b)
{
	if(a==b) return ;
	int m=(a+b)/2;
	mergesort(a,m);
	mergesort(m+1,b);
	merge(a,m,b);
}
int main()
{
	int i,j,k;
	while(scanf("%d",&n),n){
		for(i=1;i<=n;i++)
			scanf("%lld",&a[i]);
		sum=0;
		mergesort(1,n);
		printf("%lld\n",sum);
	}
}




标签:2299,int,QuickSort,归并,long,---,include,500005,逆序
From: https://blog.51cto.com/u_16244339/7444304

相关文章

  • hdu 4712 Hamming Distance-----随机
    计算出二进制数中有多少个1:数据范围太大,想到可以随机如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。------百度rand#include<cstdio>#include<cstring>#include<algorithm>#include<time.h>usingnamespacestd;constintN=1e5+10......
  • poj 4604 Deque-----2013多校联合赛第一场--1005
    做了一天,终于做出来了。。结题报告:考虑题目的一个简化版本:使双端队列单调上升。对于序列A和队列Q,找到队列中最早出现的数字Ax,则Ax将Q分成的两个部分分别是原序列中以Ax开始的最长上升和最长下降序列,答案即为这两者之和的最大值。而对于本题,由于存在相同元素,所以只要找到以Ax......
  • poj 4607 Park Visit --2013多校联合赛第一场---1008
    解题报告:首先如果k小于等于直径长度,那么答案为k−1。如果k大于直径长度,设直径长度为r,那么答案为r−1+(k−r)∗2。 先找树的最长路;找树中任意一点,dfs找该点所能达到的最远的点vv,然后从vv点dfs找树的最长路。。#include<stdio.h>#include<string.h>#include<vector>#includ......
  • poj 1469 COURSES----二分图
    二分图的最大匹配,模板。。#include<stdio.h>#include<string.h>booledge[110][310],visited[310];intcx[110],cy[310];intn,m;intpath(intu){ intv; for(intv=1;v<=m;v++) if(edge[u][v]&&!visited[v]){ visited[v]=1; if(cy[v]==-1||......
  • poj 1325 Machine Schedule---二分图求最小顶点覆盖
    二分图求最小顶点覆盖。。注意本题说,机器开始在0开始,所以就是默认和0相连的job已经被完成了,所以我是从1开始扫的点正常的话,要将edge【】【】和0相连的边值赋为0,表示该job已经被完成。。。#include<stdio.h>#include<string.h>booledge[110][110],visited[110];intcx[110],cy......
  • UVA-1401 - Remember the Word -----Trie前缀树
    题意:给出N个不同单词和一个长字符串S。把这个字符串分解成若干个单词的连接(单词尅重复使用),问有多少种方法?分析:令d[i]表示从字符i开始的字符串的分解方案数,则d[i]=sum{d[i+len[x]]|单词x是S[i...len]的前缀};详看《算法竞赛入门经典》---刘汝佳--Page208.......
  • stl--<map>的用法
    Themostfrequentnumber第一行输入n(n<1000000);第二行输入n个数,找出出现次数最多的数,入不只有一个答案,输出最小的答案;例:输入:6122235输出:2用的#include<map>,按键值(第一个数的值)排序,主要有:定义:map<int,float>m;......
  • a^b%c问题 ---模板
    (1)ABmodC.(1<=A,B<2^62,1<=C<=10^9)http://acm.bit.edu.cn/mod/programming/view.php?a=530快速幂----二分#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>usingnamespacestd;longlongquickpow(......
  • 树状数组--模板
    #include<stdio.h>#include<string.h>#defineN50050intn;intin[N];intLowbit(intt){ returnt&(-t);}intSum(intp){ intsum=0; while(p>0) { sum+=in[p]; p-=Lowbit(p); } returnsum;}voidplus(intp,intnum){ while(......
  • hdu-3926-Hand in Hand-并查集
    判断两个图是否同构。。用了并查集。。#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#include<queue>#include<stack>usingnamespacestd;#definelllonglongintn,m;structnode{ intfu; intsum; intf......