using
System;
using
System.Collections.Generic;
class
Program {
static
int
minimum_operations(List<
int
> arr,
int
n)
{
Dictionary<
int
, List<
int
> > mpp
=
new
Dictionary<
int
, List<
int
> >();
for
(
int
i = 0; i < arr.Count; i++) {
if
(!mpp.ContainsKey(arr[i])) {
mpp[arr[i]] =
new
List<
int
>();
}
mpp[arr[i]].Add(i);
}
Queue<
int
> q =
new
Queue<
int
>();
HashSet<
int
> st =
new
HashSet<
int
>();
int
count = 0;
for
(
int
i = 0; i < n - 1; i++) {
if
(!st.Contains(arr[i]) && arr[i] != 0) {
q.Enqueue(arr[i]);
st.Add(arr[i]);
}
if
(arr[i] > arr[i + 1]) {
count += q.Count;
while
(q.Count > 0) {
int
top = q.Dequeue();
if
(mpp.ContainsKey(top)) {
List<
int
> idx = mpp[top];
for
(
int
j = 0; j < idx.Count;
j++) {
arr[idx[j]] = 0;
}
}
}
}
}
return
count;
}
static
void
Main(
string
[] args)
{
List<
int
> arr =
new
List<
int
>{ 4, 1, 5, 3, 2 };
int
n = arr.Count;
Console.WriteLine(minimum_operations(arr, n));
}
}