Pagini recente » Cod sursa (job #35745) | Cod sursa (job #844649) | Cod sursa (job #1639804) | Cod sursa (job #1601117) | Cod sursa (job #945129)
Cod sursa(job #945129)
#include <fstream>
#include <algorithm>
using namespace std;
int poz,pz,i,st,dr,mij,n,lmax,x[100001],y[100001],a[100001],v[100001],mx,k;
int main()
{
ifstream f("scmax.in");
ofstream g("scmax.out");
f>>n;
for (i=1;i<=n;i++) f>>a[i];
x[1]=a[1];
lmax=1;y[1]=1;
for (i=2;i<=n;i++)
{
st=1;
dr=lmax;
pz=0;
while (st<=dr && poz==0)
{
mij=(st+dr)/2;
if (x[mij]==a[i]) pz=mij;
else if (x[mij]>a[i]) dr=mij-1;
else st=mij+1;
}
if (pz==0) pz=st;
x[pz]=a[i];
if (st>lmax) lmax=st;
y[i]=pz;
if (y[i]>mx) mx=y[i];
}
g<<mx<<'\n';
for (i=1; i<=n; i++) if (y[i]==mx) poz=i;
k=1;
v[1]=a[poz];
lmax=y[poz];
for (i=poz-1; i>=1; i--)
if (y[i]==lmax-1)
{
lmax--;
k++;
v[k]=a[i];
}
for (i=k;i>=1;i--) g<<v[i]<<" ";
g<<'\n';
f.close();
g.close();
return 0;
}