Подразделы

Другие разделы

Дата и время

20/04/2024 13:05:10

Авторизация

Имя:
Пароль:
Зарегистрироваться
Восстановить пароль
 

printВозрастающая подпоследовательность

#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
     int n,m,i;
     cin>>n;
     vector<int> x(n);
     for(i=0;i<n;++i)
       cin>>x[i];
     vector<int> b(n,-1);
     vector<pair<int,int> > a;
     for(i=0;i<n;++i)
     {
       m=lower_bound(a.begin(),a.end(),make_pair(x[i],0))-a.begin();
       if(m==a.size())
         a.push_back(make_pair(x[i],i));
       else if(x[i]<a[m].first)
         a[m]=make_pair(x[i],i);
       else
         continue;
       if(m>0)
         b[i]=a[m-1].second;
     }
     vector<int> r;
     i=a.back().second;
     while(i>=0)
     { r.push_back(x[i]);
       i=b[i];
     }
     cout<<r.size()<<'\n';
     for(i=r.size()-1;i>=0;--i)
       cout<<r[i]<<(i>0?' ':'\n');
     return 0;
}
loading