Pagini recente » Cod sursa (job #1223868) | Cod sursa (job #2801614) | Cod sursa (job #2046140) | Cod sursa (job #589744) | Cod sursa (job #1174864)
#include <iostream>
#include <fstream>
using namespace std;
int n,a[100005],iant[100005],ithis[100005],v[100005],vsz,i,iv;
void citire()
{
FILE * f;
f=fopen("scmax.in","r");
fscanf(f,"%d",&n);
int i;
for (i=1;i<=n;i++)
fscanf(f,"%d",&a[i]);
a[0]=-2000000000;
iant[0]=ithis[0]=0;
}
int bsearch(int val)
{
int st=0;
int dr=vsz;
int ans=vsz+1;
int mij=0;
while (st<=dr)
{
mij=(st+dr)/2;
if (v[mij]<val)
st=mij+1;
else
{
ans=mij;
dr=mij-1;
}
}
return ans;
}
void afisare()
{
ofstream g("scmax.out");
int now=ithis[vsz];
int r[100005];
int rsz=0;
while (now!=0)
{
rsz++;
r[rsz]=a[now];
now=iant[now];
}
g<<rsz<<'\n';
int i;
for (i=rsz;i>=1;i--)
g<<r[i]<<' ';
g<<'\n';
g.close();
}
int main(void)
{
citire();
for (i=1;i<=n;i++)
{
iv=bsearch(a[i]);
if (iv>vsz)
vsz=iv;
v[iv]=a[i];
iant[i]=ithis[iv-1];
ithis[iv]=i;
}
afisare();
return 0;
}