Pagini recente » Profil FlorinCHI3 | Cod sursa (job #2893272) | Istoria paginii utilizator/xxcristi_ | Cod sursa (job #222051) | Cod sursa (job #2355089)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
inline bool compare(const int & a, const int & b)
{
return a < b;
}
const int MX = 100000 + 50;
int n, v[MX], sz;
vector <int> aux, pos, rasp;
int main()
{
fin >> n;
for(int i=1; i<=n; ++i)
fin >> v[i];
aux.push_back(v[1]);
pos.push_back(1);
for(int i=2;i<=n;++i)
if(v[i]>aux.back())
{
aux.push_back(v[i]);
pos.push_back(i);
}
else if(v[i]<aux.back())
{
vector <int>::iterator p=lower_bound(aux.begin(),aux.end(),v[i],compare);
*p=v[i];
int k=p-aux.begin()+1;
pos.push_back(k);
}
sz=aux.size();
fout<<sz<<"\n";
int sz=aux.size();
for(int i=pos.size()-1;i>=0&&sz>0;--i)
if(pos[i]==sz)
{
rasp.push_back(v[pos[i]]);
--sz;
}
for(int i=rasp.size()-1;i>=0;--i)
fout<<rasp[i]<<" ";
return 0;
}