View Code of Problem 613

#include<stdio.h>
long long m,n,s;
void Merge(int source[],int temp[],int start,int mid,int end)
{
	int i = start,j=mid+1,k = start;
	while(i!=mid+1&&j!=end+1)
	{
		if(source[i]<source[j])
		{
		   temp[k++]=source[i++];
		   s++;
		}
		else
		{
			temp[k++]=source[j++];
			s++;
		}
	}
	while(i!=mid+1)
	{
		temp[k++]=source[i++];
	}
	while(j!=end+1)
	{
		temp[k++]=source[j++];
	}
	for(i=start;i<=end;i++)
		source[i]=temp[i];
}
void Mergesort(int source[],int temp[],int start,int end)
{
	int mid;
	if(start<end)
	{
		mid=(start+end)/2;
		Mergesort(source,temp,start,mid);
		Mergesort(source,temp,mid+1,end);
		Merge(source,temp,start,mid,end);
	}
}
int main()
{
	int i,mid,source[100000],temp[100000];
	while(scanf("%lld%lld",&n,&m)!=EOF)
	{
		s=0;
		for(i=0;i<n;i++)
			scanf("%d",source+i);
		Mergesort(source,temp,0,n-1);
		if(s<=m)
			printf("0\n");
		else
			printf("%lld\n",s-m);
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 613