Pagini recente » Cod sursa (job #133178) | Cod sursa (job #98779) | Cod sursa (job #2314348) | Cod sursa (job #239461) | Cod sursa (job #883310)
Cod sursa(job #883310)
#include <fstream>
#define NMAX 100005
#define maxim 2000000002
using namespace std;
ifstream ka("scmax.in");
ofstream ki("scmax.out");
int a[NMAX],q[NMAX],p[NMAX],st[NMAX],k,l,n;
int cautare(int st,int dr,int x)
{
int m=0;
while(st<dr)
{
m=(st+dr)/2;
if(q[m]>=x)
dr=m;
else
st=m+1;
}
return st;
}
int main()
{
ka>>n;
for(int i=1;i<=n;i++)
{ka>>a[i];
q[i]=maxim;}
for(int i=1;i<=n;i++)
{
k=cautare(1,l+1,a[i]);
if(q[k]==maxim)
l++;
q[k]=a[i];
p[i]=k;
}
ki<<l<<'\n';
k=0;
for(int i=n;i>=1;i--)
{
if(p[i]==l)
{
st[++k]=a[i];
l--;
}
if(!l)
break;
}
for(int i=k;i>=1;i--)
ki<<st[i]<<" ";
}