Pagini recente » Cod sursa (job #2937575) | Cod sursa (job #893231) | Cod sursa (job #1764255) | Cod sursa (job #1709730) | Cod sursa (job #1466503)
#include <iostream>
#include <fstream>
#define Infinity 2000000001
using namespace std;
ifstream t1("scmax.in");
ofstream t2("scmax.out");
int n,v[100010],q[100010],p[100010],len,maxim;
int place(int x,int st,int dr)
{
int mid=(st+dr)/2;
if(st==dr)
{
if(st>len) q[++len+1]=Infinity;
q[st]=x;
return st;
}
else if(x<=q[mid]) return place(x,st,mid);
else return place(x,mid+1,dr);
}
void construct(int x,int val)
{
int i;
for(i=x;i>=1;i--)
if(p[i]==val)
{
construct(i-1,val-1);
t2<<v[i]<<' ';
break;
}
}
int main()
{
int i,rat;
t1>>n;
len=0; q[1]=Infinity;
for(i=1;i<=260;i++)
{
t1>>v[i];
p[i]=place(v[i],1,len+1);
}
t2<<len<<'\n';
construct(n,len);
t1.close();
t2.close();
return 0;
}