Pagini recente » Cod sursa (job #3120566) | Cod sursa (job #2772155) | Cod sursa (job #907927) | Cod sursa (job #2616754) | Cod sursa (job #855135)
Cod sursa(job #855135)
#include<fstream>
#define NMAX 100010
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, m, a[NMAX], vz[NMAX], b[NMAX], nr[NMAX];
void Citeste()
{
int i;
f>>n;
for (i=1; i<=n; ++i) f>>a[i];
}
int cauta(int x)
{
int st=1, dr=m, mij, pz=m+1;
while (st<=dr)
{
mij=(st+dr)/2;
if (b[mij]>=x)
{
pz=mij;
dr=mij-1;
}
else st=mij+1;
}
return pz;
}
void Solve()
{
int i, c, mx=0, imx,j ;
vz[1]=1; b[1]=a[1]; m=1; nr[1]=1;
for (i=2; i<=n; ++i)
{
c=cauta(a[i]);
vz[i]=c;
b[c]=a[i];
nr[c]++;
if (m<c) ++m;
}
g<<m<<"\n";
}
void Scrie(int m, int n)
{
if (m!=0)
if (vz[n]!=m) Scrie(m, n-1);
else
{
Scrie(m-1, n-1);
g<<a[n]<<" ";
}
}
int main()
{
Citeste();
Solve();
Scrie(m, n);
f.close();
g.close();
return 0;
}