Pagini recente » Cod sursa (job #2107705) | Cod sursa (job #2810982) | Cod sursa (job #2677698) | Cod sursa (job #2281046) | Cod sursa (job #2374525)
#include <bits/stdc++.h>
#define Dim 100007
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N,ans1,V[Dim],Q[Dim],P[Dim],st,dr,cnt;
int L[Dim],k;
int main()
{
f>>N;
for(int i=1;i<=N;i++)
{
f>>V[i];
if(!ans1)
{
ans1++,Q[ans1]=V[i];
P[++cnt]=1;
}
else
{
st=1; dr=ans1;
int poz=0;
bool ok=0;
while(st<=dr)
{
int mij=(st+dr)/2;
if(V[i]>Q[mij]) st=mij+1;
else
{
ok=1;
poz=mij;
dr=mij-1;
}
}
if(ok==0)
{
ans1++;
Q[ans1]=V[i];
P[++cnt]=ans1;
}else
{
Q[poz]=V[i];
P[++cnt]=poz;
}
}
}
g<<ans1<<'\n';
for(int i=cnt;i>=1&&ans1>0;i--)
if(P[i]==ans1)
{
ans1--;
L[++k]=i;
}
for(int i=k;i>=1;i--) g<<V[L[i]]<<" ";
return 0;
}