Pagini recente » Cod sursa (job #737262) | Cod sursa (job #1430713) | Cod sursa (job #3211392) | Cod sursa (job #2611159) | Cod sursa (job #2519653)
//#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int Max=100005;
int v[Max],nr,drum[Max],sir[Max],sol[Max],q,n;
int cautare(int x,int st,int dr)
{
int poz=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(x>v[mij])
st=mij+1;
else
{
poz=mij;
dr=mij-1;
}
}
return poz;
}
int main()
{
in>>n;
for(int i=1;i<=n;i++)
{
int x; in>>x; int poz;
sir[i]=x;
poz=cautare(x,1,nr);
if(poz==-1)
v[++nr]=x;
else
v[poz]=x;
drum[i]=nr;
}
out<<nr<<"\n"; int num=nr;
for(int i=n;i>=1;i--)
{
if(drum[i]==num)
{
sol[++q]=sir[i];
num--;
}
}
for(int i=q;i>=1;i--)
out<<sol[i]<<" ";
return 0;
}