import core.bitop, std.algorithm, std.ascii, std.bigint, std.conv, std.math,
    std.functional, std.numeric, std.range, std.stdio, std.string, std.random,
    std.typecons, std.container, std.format;

// dfmt off
T lread(T = long)(){return readln.chomp.to!T();}
T[] lreads(T = long)(long n){return generate(()=>readln.chomp.to!T()).take(n).array();}
T[] aryread(T = long)(){return readln.split.to!(T[])();}
void scan(TList...)(ref TList Args){auto line = readln.split();
foreach (i, T; TList){T val = line[i].to!(T);Args[i] = val;}}
alias sread = () => readln.chomp();enum MOD = 10 ^^ 9 + 7;
alias PQueue(T, alias less = "a<b") = BinaryHeap!(Array!T, less);
// dfmt on

void main()
{
    long N = lread();
    auto A = new long[][](2);
    foreach (i; 0 .. N)
        A[i & 1] ~= lread();
    A[0].sort();
    A[1].sort();
    long[2] jj;
    long ans;
    // auto S = new long[](N);
    // foreach (i; 0 .. N)
    // {
    //     S[i] = A[i & 1][jj[i & 1]++];
    // }
    // jj[] = 0;
    // writeln(S);
    // S.sort();
    // writeln(S);
    foreach (i; 0 .. N)
    {
        if (A[1].length <= jj[1] || (jj[0] < A[0].length && A[0][jj[0]] < A[1][jj[1]]))
        {
            long j = jj[0] * 2;
            ans += (i & 1) == 1;
            // writeln(j - i);
            jj[0]++;
        }
        else
        {
            long j = jj[1] * 2 + 1;
            ans += (i & 1) == 0;
            // writeln(j - i);
            jj[1]++;
        }
    }
    writeln(ans / 2);
}
