Pagini recente » Cod sursa (job #506075) | Cod sursa (job #321679) | Cod sursa (job #792495) | Cod sursa (job #599996) | Cod sursa (job #2211076)
#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int MAX=1e6+1;
int v[MAX], n, lg[MAX], lgmax;
int pre[MAX];
int main()
{
in>>n;
for(int i=1; i<=n; i++)
in>>v[i];
for(int i=1; i<=n; i++)
{
int st = 1, dr = lgmax;
while(st<=dr)
{
int mijl = (st+dr)/2;
if(v[lg[mijl]] < v[i])
st = mijl+1;
else dr = mijl-1;
}
if(st>lgmax)
lgmax = st;
lg[st] = i;
pre[i] = lg[dr];
}
stack<int> s;
int poz = lg[lgmax];
while(poz!=0)
{
s.push(v[poz]);
poz = pre[poz];
}
out<<lgmax<<'\n';
while(!s.empty())
{
out<<s.top()<<' ';
s.pop();
}
return 0;
}