Pagini recente » Cod sursa (job #97413) | Cod sursa (job #1556928) | Cod sursa (job #2168549) | Cod sursa (job #512857) | Cod sursa (job #750463)
Cod sursa(job #750463)
#include <fstream>
#define inf 1999999999
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int a[100020],Q[100020],p[100020],mx,pz,l,u,n,i;
int cb (int x,int Q[],int st,int dr)
{
int mij,pz;
pz=0;
while (st<=dr && !pz)
{
mij=(st+dr)/2;
if (Q[mij]==x) pz=mij;
else
if (Q[mij]>x) dr=mij-1;
else st=mij+1;
}
if (!pz)
{
pz = st;
if (st > l) l++;
}
Q[pz] = x;
return pz;
}
void scriere (int u,int i,int lg)
{
if (i>0)
{
if (a[i] < u && p[i] == lg)
{
scriere (a[i],i - 1, lg - 1);
g << a[i] << ' ';
}
else scriere (u , i-1 , lg);
}
}
int main ()
{
f>>n;
for (i=1; i<=n; i++)
f >>a[i];
l=1; Q[1]=a[1]; mx=1;
for (i=2; i<=n; i++)
{
p[i]=cb(a[i],Q,1,l);
if (l > mx)
{
mx = l;
pz = i;
}
}
u=inf;
g << mx << endl;
scriere (u, pz, mx);
f.close();
g.close();
return 0;
}