Pagini recente » Cod sursa (job #1902052) | Cod sursa (job #1999306) | Cod sursa (job #2079057) | Cod sursa (job #1573504) | Cod sursa (job #2674829)
#include <iostream>
#include <fstream>
#include <vector>
#define mx 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, v[mx], L[mx], lmax;
vector <int> sir;
void citire()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i];
fin.close();
}
int bin_search(int x)
{
if(sir.empty() or x>sir.back())
return sir.size();
int st=0, dr=sir.size()-1, mij;
while(st<dr)
{
mij=(st+dr)/2;
if(sir[mij]>=x)
dr=mij;
else
st=mij+1;
}
return st;
}
void parcurgere()
{
int poz;
for(int i=1;i<=n;i++)
{
poz=bin_search(v[i]);
if(poz==sir.size())
sir.push_back(v[i]);
else
sir[poz]=v[i];
L[i]=poz+1;
if(L[i]>lmax)
lmax=L[i];
}
}
void afisare(int val, int poz)
{
if(val!=0)
{
while(L[poz]!=val)
poz--;
afisare(val-1,poz-1);
fout<<v[poz]<<' ';
}
}
int main()
{
citire();
parcurgere();
fout<<lmax<<endl;
afisare(lmax,n);
return 0;
}