mergeInvCount <- function( arr, from = 1, to = length(arr) )
{
  if( from == to ) list( invs = 0, sorted = c(arr[from]))
  else
  {
    div <- as.integer( (from + to) / 2 )
    left <- mergeInvCount(arr, from, div)
    right <- mergeInvCount(arr, div+1, to)
    sorted <- vector("integer", length = to - from + 1)
    rlen <- length(right$sorted)
    llen <- length(left$sorted)
    index <- 1
    r <- 1
    l <- 1
    invs <- 0
    while(r <= rlen && l <= llen)
    {
      if(left$sorted[l] > right$sorted[r])
      {
        sorted[index] <- right$sorted[r]
        r <- r + 1
        invs <- invs + llen - l + 1
      }
      else
      {
        sorted[index] <-left$sorted[l]
        l <- l + 1
      }
      index <- index + 1
    }
    while(l <= llen){sorted[index]<-left$sorted[l];index<-index+1;l<-l+1;}
    while(r <= rlen){sorted[index]<-right$sorted[r];index<-index+1;r<-r+1;}
    list(invs = left$invs + right$invs + invs, sorted = sorted)
  }
}

array <- read.table("IntegerArray.txt")[,1]
result <- mergeInvCount(array)$invs