Pagini recente » Cod sursa (job #1628707) | Cod sursa (job #2264755) | Cod sursa (job #2743926) | Cod sursa (job #1304403) | Cod sursa (job #1757219)
#include <bits/stdc++.h>
using namespace std;
int ant[100005],val[100005],n,poss,t,a[100005];
ofstream fout("scmax.out");
void Citire()
{
ifstream fin("scmax.in");
fin>>n;
for(int i=1;i<=n;i++)
fin>>a[i];
fin.close();
}
void Solutie()
{
int i,st,dr,mij;
val[1]=1;
t=1;
poss=1;
for(i=2;i<=n;i++)
{
if(a[i]>a[val[t]])
{
val[++t]=i;
ant[i]=val[t-1];
poss++;
}
else
{
st=1;
dr=t;
while(st<=dr)
{
mij=(st+dr)/2;
if(a[i]>a[val[mij-1]] && a[i]<=a[val[mij]])
{
val[mij]=i;
ant[i]=val[mij-1];
break;
}
else if(a[i]>a[val[mij]])
st=mij+1;
else dr=mij-1;
}
}
}
}
void rec(int k)
{
if(ant[k]!=0) rec(ant[k]);
fout<<a[k]<<" ";
}
void Afisare()
{
fout<<poss<<"\n";
rec(val[t]);
}
int main()
{
Citire();
Solutie();
Afisare();
fout.close();
return 0;
}