Pagini recente » Cod sursa (job #1812483) | Cod sursa (job #1230587) | Cod sursa (job #1225601) | Cod sursa (job #1082172) | Cod sursa (job #1798803)
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 100010
using namespace std;
ifstream f ("scmax.in");
ofstream t ("scmax.out");
vector <int> v,sol;
int q[nmax],d[nmax],tata[nmax],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 x,n;
f>>n;
for (int i=0;i<n;++i)
f>>x,v.push_back(x);
for(int i=0;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=-1,pos;
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.push_back(v[i]);
t<<sol.size()<<'\n';
for (vector<int>::iterator i=sol.end()-1;i>=sol.begin();--i)
t<<*i<<" ";
return 0;
}