I kept WA at the beginning, but found that the final answer of vjudge had to wrap, just simulate this question
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <algorithm>
#define MAX 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,m,k;
int a[100001];
vector<int>s[100001];
int main()
{
cin>>n;
int cnt = 1;
for(int i = 0 ;i < n ; i ++)
cin>>a[i];
int mmax = a[0];
s[0].push_back(a[0]);
for(int i = 1 ; i < n ; i++)
{
if(a[i] > mmax)
{
s[cnt++].push_back(a[i]);
mmax = a[i];
}
else{
int idx = -1;
int mmin = MAX;
for(int j = 0 ; j < cnt ; j++)
{
if(s[j][s[j].size() - 1] >= a[i] && s[j][s[j].size() - 1] < mmin)
{
mmin = s[j][s[j].size() - 1];
idx = j;
}
}
s[idx].push_back(a[i]);
int mm = -1;
for(int j = 0 ; j < cnt ; j++)
if(s[j][s[j].size() - 1] > mm)
mm = s[j][s[j].size() - 1];
mmax = mm;
}
}
cout<<cnt<<endl;
return 0;
}