Pagini recente » Cod sursa (job #44268) | Cod sursa (job #1534586) | redsnow_2 | Cod sursa (job #1369565) | Cod sursa (job #1870558)
#include<fstream>
using namespace std;
#define fin "scmax.in"
#define fout "scmax.out"
#define nmax 100010
ifstream f(fin);
ofstream g(fout);
long a[nmax],l[nmax],s[nmax],n,sol[nmax];
void read()
{
f>>n;
for(long i=1;i<=n;i++)f>>a[i];
f.close();
}
long poz(long p,long u,long x)
{
while(p<=u)
{
int mij=(p+u)/2;
if(x==s[mij]) return mij;
else
if(x<s[mij])u=mij-1;
else p=mij+1;
}
return p;
}
void dinamic()
{
s[1]=a[1];l[1]=1;
long p=1,u=1,i,ii=1;long max=l[1];
for(i=2;i<=n;i++)
{
int k=poz(p,u,a[i]);
if(k>u)u=k;
s[k]=a[i];l[i]=k;
if(l[i]>max){max=l[i];ii=i;}
}
long lung=max;i=ii;
while(lung>0)
{
if(l[i]==lung)
{
sol[lung]=a[i];
lung--;
}
i--;
}
g<<max<<'\n';
for(i=1;i<=max;i++)
g<<sol[i]<<" ";
g.close();
}
int main()
{
read();
dinamic();
return 0;
}