Problem:
Score : 600 points

Problem Statement

Snuke got an integer sequence of length N from his mother, as a birthday present. The i-th (1 ≦ i ≦ N) element of the sequence is a_i. The elements are pairwise distinct.
He is sorting this sequence in increasing order.
With supernatural power, he can perform the following two operations on the sequence in any order:

Operation 1: choose 2 consecutive elements, then reverse the order of those elements.

Operation 2: choose 3 consecutive elements, then reverse the order of those elements.

Snuke likes Operation 2, but not Operation 1. Find the minimum number of Operation 1 that he has to perform in order to sort the sequence in increasing order.

Constraints

1 ≦ N ≦ 10^5

0 ≦ A_i ≦ 10^9

If i ≠ j, then A_i ≠ A_j.

All input values are integers.

Input

The input is given from Standard Input in the following format:

N
A_1
:
A_N

Output

Print the minimum number of times Operation 1 that Snuke has to perform.

Sample Input 1

4
2
4
3
1

Sample Output 1

1

The given sequence can be sorted as follows:

First, reverse the order of the last three elements. The sequence is now: 2,1,3,4.

Then, reverse the order of the first two elements. The sequence is now: 1,2,3,4.

In this sequence of operations, Operation 1 is performed once. It is not possible to sort the sequence with less number of Operation 1, thus the answer is 1.

Sample Input 2

5
10
8
5
3
2

Sample Output 2

0

Solution in Ruby (2.7.1) (judge verdict: Wrong Answer)

#input of int(split by space)
def get_i()
  return gets.chomp.split(" ").map(&:to_i)
end
#input of float(split by space)
def get_f()
  return gets.chomp.split(" ").map(&:to_f)
end
#input of string(split by space)
def get()
  return gets.chomp.split(" ")
end
#input of string(split per one character)
def get_nsp()
  return gets.chomp.split("")
end
#yes or no decision
def yn_judge(bool,y="Yes",n="No")
  return bool ? y : n 
end
#create of array
def array(size1,init=nil,size2=-1)
  if size2==-1
      return Array.new(size1){init}
  else
      return Array.new(size2){Array.new(size1){init}}
  end
end

def max(a,b)
    return a>b ? a : b
end

def min(a,b)
    return a>b ? b : a
end

INF=Float::INFINITY

N=gets.to_i
class BIT
    attr_accessor:bit,:n
    def initialize(n)
        @n=n
        @bit=array(n+1,0)
    end

    def add(i,x)
        while i<=@n
            @bit[i]+=x
            i+=i&-i
        end
    end

    def sum(i)
        ret=0
        while i>0
          ret+=@bit[i]
          i-=i&-i
        end
        return ret
    end
end
a=array(N)
kind_a=Hash.new(0)
N.times do|i|
    a[i]=gets.to_i
    kind_a[a[i]]=1
end
ch_a=Hash.new(-1)
kind_a.sort.each_with_index do|arr,i|
    ch_a[arr[0]]=i
end
odd=[]
even=[]
N.times do|i|
    a[i]=ch_a[a[i]]
    if i.odd?
        odd<<a[i]
    else
        even<<a[i]
    end
end
odd.sort!
even.sort!
b=array(N)
N.times do|i|
    if i.odd?
        b[i]=odd.shift
    else
        b[i]=even.shift
    end
end
#p b
ans=0
bit=BIT.new(N+1)
b.each_with_index do|v,i|
    ans+=i-bit.sum(v+1)
    bit.add(v+1,1)
end
puts ans