#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <map>
#include <queue>
#include <sstream>
using namespace std;
#define F(a,b) for(int a=0;a<b;++a)
typedef long long LL;
const int Max = 1e5 + 10;
LL n,ans,p[Max],s[Max];
vector<LL> lis;
bool cmp(LL a,LL b){ return a > b; }
void Lis(){
int pos = 0;
for(int i=n-1;i>=0;--i)
if((i == n-1) || (s[i] < lis.back())){
lis.push_back(s[i]);
p[i] = (++pos);
}
else{
vector<LL>::iterator l = lower_bound(lis.begin(),lis.end(),s[i],cmp);
*l = s[i];
p[i] = l - lis.begin() + 1;
}
F(i,n) if(p[i] == pos){
ans += i+1;
pos --;
}
}
int main(){
scanf("%lld",&n);
F(i,n) scanf("%lld",&s[i]);
Lis();
printf("%lld\n",ans);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8c3N0cmVhbT4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiNkZWZpbmUgRihhLGIpIGZvcihpbnQgYT0wO2E8YjsrK2EpCnR5cGVkZWYgbG9uZyBsb25nIExMOwogCmNvbnN0IGludCBNYXggPSAxZTUgKyAxMDsKIApMTCBuLGFucyxwW01heF0sc1tNYXhdOwp2ZWN0b3I8TEw+IGxpczsKIApib29sIGNtcChMTCBhLExMIGIpeyByZXR1cm4gYSA+IGI7IH0Kdm9pZCBMaXMoKXsKICAgIGludCBwb3MgPSAwOwogICAgZm9yKGludCBpPW4tMTtpPj0wOy0taSkKICAgICAgICBpZigoaSA9PSBuLTEpIHx8IChzW2ldIDwgbGlzLmJhY2soKSkpewogICAgICAgICAgICBsaXMucHVzaF9iYWNrKHNbaV0pOwogICAgICAgICAgICBwW2ldID0gKCsrcG9zKTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgdmVjdG9yPExMPjo6aXRlcmF0b3IgbCA9IGxvd2VyX2JvdW5kKGxpcy5iZWdpbigpLGxpcy5lbmQoKSxzW2ldLGNtcCk7CiAgICAgICAgICAgICpsID0gc1tpXTsKICAgICAgICAgICAgcFtpXSA9IGwgLSBsaXMuYmVnaW4oKSArIDE7CiAgICAgICAgfQogICAgRihpLG4pIGlmKHBbaV0gPT0gcG9zKXsKICAgICAgICBhbnMgKz0gaSsxOwogICAgICAgIHBvcyAtLTsKICAgIH0KfQogCmludCBtYWluKCl7CiAgICBzY2FuZigiJWxsZCIsJm4pOwogICAgRihpLG4pIHNjYW5mKCIlbGxkIiwmc1tpXSk7CiAgICBMaXMoKTsKICAgIHByaW50ZigiJWxsZFxuIixhbnMpOwp9CgoK