using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Collections;
public
class
Program
{
public
static
int
[] CountGreaterRight(
int
[] A,
int
lenn,
int
[] countGreater_right)
{
SortedDictionary<
int
,
int
> s =
new
SortedDictionary<
int
,
int
>();
for
(
int
i = lenn - 1; i >= 0; i--)
{
int
it = s.TakeWhile(x => x.Key < A[i]).Count();
countGreater_right[i] = it;
s[A[i]] = 1;
}
return
countGreater_right;
}
public
static
int
[] CountGreaterLeft(
int
[] A,
int
lenn,
int
[] countGreater_left)
{
SortedDictionary<
int
,
int
> s =
new
SortedDictionary<
int
,
int
>();
for
(
int
i = 0; i < lenn; i++)
{
int
it = s.TakeWhile(x => x.Key < A[i]).Count();
countGreater_left[i] = it;
s[A[i]] = 1;
}
return
countGreater_left;
}
public
static
void
CntOfOperations(
int
N,
int
[] A)
{
int
[][] a =
new
int
[N][];
for
(
int
i = 0; i < N; i++)
{
a[i] =
new
int
[2] { A[i], i };
}
Array.Sort(a, (x, y) => x[0].CompareTo(y[0]));
int
[] countGreater_right =
new
int
[N];
int
[] countGreater_left =
new
int
[N];
countGreater_right = CountGreaterRight(A, N, countGreater_right);
countGreater_left = CountGreaterLeft(A, N, countGreater_left);
int
prev = a[0][1], ind = 0;
int
count = prev;
for
(
int
i = 1; i < N; i++)
{
ind = a[i][1];
if
(ind > prev)
{
count += countGreater_right[prev] - countGreater_right[ind];
}
else
{
count += countGreater_right[prev] + countGreater_left[ind] + 1;
}
prev = ind;
}
Console.WriteLine(count+1);
}
static
void
Main()
{
int
[] A = {8, 5, 2, 3};
int
N = A.Length;
CntOfOperations(N, A);
}
}