Pagini recente » Cod sursa (job #3263026) | Cod sursa (job #495274) | Cod sursa (job #159687) | Cod sursa (job #94478) | Cod sursa (job #2578516)
#include <bits/stdc++.h>
#define val first
#define poz second
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int a[100001],n;
int bac[100001];
pair <int,int> lung[100001];
int lgmx;
int sol[100001],nrsol;
int find_bin(int st,int dr,int val)
{
while(st<=dr)
{
int m=(st+dr)/2;
if(lung[m].val>val)
dr=m-1;
else
st=m+1;
}
if(lgmx<st && lung[lgmx].val!=val)
lgmx++;
return st;
}
int main()
{
in>>n;
for(int i=1;i<=n;i++)
{
in>>a[i];
int poz=find_bin(1,lgmx,a[i]);
if(!lung[poz].val || a[i]!=lung[poz-1].val)
{
bac[i]=lung[poz-1].poz;
lung[poz].val=a[i];
lung[poz].poz=i;
}
}
int k=lung[lgmx].poz,nrsol=0;
while(k)
{
sol[++nrsol]=a[k];
k=bac[k];
}
out<<lgmx<<'\n';
while(nrsol)
out<<sol[nrsol--]<<' ';
}