Pagini recente » Cod sursa (job #2231092) | Cod sursa (job #1838996) | Cod sursa (job #367570) | Cod sursa (job #1648878) | Cod sursa (job #2843482)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int MAX=1e5+5;
int n,k,v[MAX],sol[MAX],t[MAX],st,dr,m,poz,u;
int main ()
{
fin >> n;
for(int i=1;i<=n;i++)
fin >> v[i];
for(int i=1;i<=n;i++)
{
st=1;
dr=k;
while(st<=dr)
{
m=(st+dr)/2;
if(v[sol[m]]<v[i])
st=m+1;
else
dr=m-1;
}
poz=st;
t[i]=sol[poz-1];
sol[poz]=i;
if(poz>k)
k=poz;
}
u=sol[k];
for(int j=k;j>=1;j--)
{
sol[j]=v[u];
u=t[u];
}
fout << k << '\n';
for(int i=1;i<=k;i++)
fout << sol[i] << " ";
return 0;
}