View Code of Problem 613

#include <stdio.h>
#include "string.h"
#include "math.h"
int cnt;
void Merge(int ss[],int ex,int ey,int sx,int sy)
{
    int temp[100002],i=ex,j=sx,pos=ex;
    for(;i<=ey&&j<=sy;)
    {
        if(ss[i]<=ss[j])
            temp[pos++]=ss[i++];
        else
        {
            temp[pos++]=ss[j++];
            cnt+=(ey-i+1);
        }
    }
    while(i!=ey+1)
        temp[pos++]=ss[i++];
    while(j!=sy+1)
        temp[pos++]=ss[j++];
    for(i=ex;i<=sy;i++)
    {
        ss[i]=temp[i];
    }
}

void Mergesort(int ss[],int left,int right)
{
    int middle;
    if(left<right)
    {
        middle=(left+right)/2;
        Mergesort(ss,left,middle);
        Mergesort(ss, middle+1, right);
        Merge(ss,left,middle,middle+1,right);
    }
}
int main()
{
    int n,k;
    
    while(scanf("%d%d",&n,&k)!=EOF)
    {
        int ss[100002];
        cnt=0;
        for(int i=0;i<n;i++)
            scanf("%d",&ss[i]);
        Mergesort(ss, 0, n-1);
        if(k>cnt) printf("0\n");
        else printf("%d\n",cnt-k);
    }
}

Double click to view unformatted code.


Back to problem 613