Pagini recente » Cod sursa (job #574992) | Cod sursa (job #624826) | Cod sursa (job #1068142) | Cod sursa (job #2321775) | Cod sursa (job #2355078)
#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;
void afisare(const int & i, const int & sz)
{
if(i<0||sz<0)
{
fout<<aux.size()<<"\n";
return;
}
if(pos[i]==sz)
{
afisare(i-1,sz-1);
fout<<v[pos[i]]<<" ";
}
else
{
afisare(i-1,sz);
}
}
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();
afisare(pos.size()-1,sz);
return 0;
}