শুক্রবার, ৩০ সেপ্টেম্বর, ২০১৬

UVA 10810 - Ultra-QuickSort

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<stdlib.h>
using namespace std;

long long int arr[500010],swaps;
void marge(long long  l,long long  m ,long long  r)
{
    long long  i,j,k;
    long long n1=m-l+1;
    long long n2=r-m;
    long long L[n1],R[n2];
    for(i=0;i<n1;i++)
    {
        L[i]=arr[l+i];
    }
    for(j=0;j<n2;j++)
    {
        R[j]=arr[m+1+j];
    }
    i=0;j=0;k=l;
    while(i<n1 && j<n2)
    {
        if(L[i]<=R[j])
        {
            arr[k]=L[i];
            i++;
        }
        else
        {
            arr[k]=R[j];
            j++;
            swaps += n1 - i;
        }
        k++;
    }
    while(i<n1)
    {
        arr[k]=L[i];
        i++;
        k++;
    }
      while(j<n2)
    {
        arr[k]=R[j];
        j++;
        k++;
    }
}
void mergeSort(long long int l,long long  r)
{
    if(l<r)
    {
        long long  m=l+(r-l)/2;
        mergeSort(l, m);
        mergeSort(m+1, r);

        marge(l, m, r);

    }
}
main()
{
   long long  n,i;
   while(~scanf("%lld",&n))
   {
         swaps=0;
         if(n==0)
            break;
       for(i=0;i<n;i++)
       {
           scanf("%lld",&arr[i]);
       }
       mergeSort(0,n-1);
       cout<<swaps<<endl;
   }

}

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন

Factorization with prime Sieve

vector <int> prime; char sieve[1000009]; int N=1000009; void primeSieve ( ) { sieve[0] = sieve[1] = 1; prime.push_back(2); ...