Pagini recente » Cod sursa (job #2253264) | Borderou de evaluare (job #2156836) | Cod sursa (job #867274) | Cod sursa (job #300407) | Cod sursa (job #2511905)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[100005],d[100005],n,i,z,p,t[100005];
int caut_bin(int x)
{
int st=1,dr=z,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(a[d[mij]]<x) st=mij+1;
else dr=mij-1;
}
return st;
}
void afis(int c)
{
if(z>0)
{
for(int k=c;k>=1;k--)
{
if(t[k]==z)
{
z--;
afis(k-1);
g<<a[k]<<" ";
break;
}
}
}
}
int main()
{
f>>n;
for(i=1;i<=n;i++) f>>a[i];
for(i=1;i<=n;i++)
{
p=caut_bin(a[i]);
t[i]=p;
if(p>z) {z++; d[z]=i;}
else if(a[i]<a[d[p]]) d[p]=i;
}
g<<z<<'\n';
afis(n);
return 0;
}