Pagini recente » Cod sursa (job #980544) | Cod sursa (job #1785971) | Cod sursa (job #40813) | Cod sursa (job #2197985) | Cod sursa (job #1131528)
#include <fstream>
using namespace std;
int a[100],i,j,m,n,poz[100],v[100],nmax,w,jmax;
ifstream f("scmax.in");
ofstream g("scmax.out");
int cautare(int x,int st,int dr)
{int mmax=0,imax=0;
while (st<=dr)
{if (x<v[(st+dr)/2]) dr=(st+dr)/2-1;
else {if (v[(st+dr)/2]>mmax){mmax=v[(st+dr)/2];
imax=(st+dr)/2;}
st=(st+dr)/2+1;
}
}
return imax;
}
int main()
{f>>n;
for (i=1;i<=n;i++) f>>a[i];
poz[1]=1;
v[1]=a[1];
nmax=1;
for (i=2;i<=n;i++)
{m=cautare(a[i],1,nmax);
v[m+1]=a[i];
poz[i]=m+1;
if (m+1>nmax) nmax=m+1;
}
for (i=1;i<=n;i++) if (poz[i]>=w) {w=poz[i];jmax=i;}
g<<w<<endl;
v[w]=jmax;
int k=w;
while (w>0)
{jmax--;
if (poz[jmax]==w-1) {v[w-1]=jmax;w--;}
}
for (i=1;i<=k;i++) g<<a[v[i]]<<" ";
g<<'\n';
}