Pagini recente » Cod sursa (job #501942) | Cod sursa (job #496977) | Cod sursa (job #656941) | Cod sursa (job #48303) | Cod sursa (job #3003273)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
const int NMAX=1e5+5;
int poz[NMAX];
int lung[NMAX];
int v[NMAX];
int sol[NMAX];
int cautbin(int x,int st,int dr)
{
int mij,ans=0;
while(st<=dr)
{
mij=st+dr;
mij/=2;
if(v[poz[mij]]<v[x])
{
ans=mij;
st=mij+1;
}
else
dr=mij-1;
}
return ans;
}
int main()
{
int n,i,j,maxi=0,kon=0;
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
for(i=1;i<=n;i++)
{
int p=cautbin(i,0,maxi);
lung[i]=p+1;
poz[p+1]=i;
maxi=max(maxi,lung[i]);
}
fout<<maxi<<"\n";
for(i=n;i>=1;i--)
{
if(lung[i]==maxi)
{
maxi--;
sol[++kon]=i;
}
}
for(i=kon;i>=1;i--)
fout<<v[sol[i]]<<" ";
return 0;
}