Pagini recente » Cod sursa (job #2201384) | Cod sursa (job #1792094) | Cod sursa (job #396076) | Cod sursa (job #309225) | Cod sursa (job #1798830)
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 100010
using namespace std;
ifstream f ("scmax.in");
ofstream t ("scmax.out");
int v[100010],q[100010],sol[100010],d[100010],tata[100010],nr=0;
int bin_search(int x)
{
int st=1,dr=nr;
while(st<=dr)
{
int mid=(st+dr)/2;
if(x<=v[q[mid]]) dr=mid-1;
else st=mid+1;
}
return st;
}
int main()
{ int n;
f>>n;
for (int i=1;i<=n;++i)
f>>v[i];
for(int i=1;i<=n;++i){
int pos=bin_search(v[i]);
if(pos>nr) ++nr;
q[pos]=i;
d[i]=d[q[pos-1]]+1;
tata[i]=q[pos-1];
}
int max=0,pos,nr=0;
for(int i=1;i<=n;++i)
if(d[i]>max) max=d[i],pos=i;
for(int i=pos;i>0;i=tata[i])
sol[++nr]=v[i];
t<<nr<<'\n';
for (int i=nr;i>0;--i)
t<<sol[i]<<" ";
return 0;
}