#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Stu
{
long long* a;
long long* o;
int size;
int capacity;
}S;
void StuInit(S* s1)
{
s1->a = s1->o = NULL;
s1->size = s1->capacity = 0;
}
void StuPush(S* s1)
{
if (s1->size == s1->capacity)
{
int newcapacity = s1->capacity == 0 ? 4 : s1->capacity * 4;
long long* tmp = (long long*)realloc(s1->a, sizeof(long long) * newcapacity);
if (tmp == NULL)
return;
s1->a = tmp;
s1->capacity = newcapacity;
}
long long x;
scanf("%lld", &x);
s1->a[s1->size] = x;
++s1->size;
}
int Test(S* s1)
{
long long i;
long long* tmp = (long long*)malloc(sizeof(long long) * s1->capacity);
if (tmp == NULL)
return 0;
s1->o = tmp;
int prev = -1;
int tail = 0;
for (i = 0; i < s1->size; ++i)
{
if (prev == -1)
{
s1->o[tail] = 1;
}
else
{
if (s1->a[tail] < s1->a[prev])
{
s1->o[tail] = 1;
int j = i - 1;
for (; j >= 0; j--)
{
if (s1->a[j] >= s1->a[j + 1] && s1->o[j] <= s1->o[j + 1])
++s1->o[j];
else
break;
}
}
else if (s1->a[tail] > s1->a[prev])
{
s1->o[tail] = s1->o[prev] + 1;
}
else if (s1->a[tail] == s1->a[prev])
{
s1->o[tail] = s1->o[prev];
}
}
prev = tail;
++tail;
}
long long sum = 0;
for (i = 0; i < s1->size; ++i)
sum += s1->o[i];
return sum;
}
int main()
{
S stu;
StuInit(&stu);
int n;
scanf("%d", &n);
long long i;
for (i = 0; i < n; ++i)
StuPush(&stu);
printf("%lld", Test(&stu));
return 0;
}