Pagini recente » Cod sursa (job #683813) | Cod sursa (job #2036171) | Cod sursa (job #2163655) | Cod sursa (job #1869442) | Cod sursa (job #597750)
Cod sursa(job #597750)
#include<fstream>
#include<algorithm>
using namespace std;
int n,v[100010],LIS[100010],poz[100010],lgmax;
void Citire()
{
int i;
ifstream fin("scmax.in");
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
fin.close();
}
void Determinare_LIS()
{
int i,pozitie;
LIS[1]=v[1];
poz[1]=1;
lgmax=1;
for(i=2;i<=n;i++)
{
pozitie=upper_bound(LIS+1,LIS+lgmax+1,v[i])-LIS;
if(LIS[pozitie-1]==v[i])
pozitie--;
LIS[pozitie]=v[i];
poz[i]=pozitie;
if(pozitie>lgmax)
lgmax=pozitie;
}
}
void Afisare()
{
int x,i,vector[100010],nr=0;
ofstream fout("scmax.out");
fout<<lgmax<<"\n";
x=lgmax;
for(i=n;i>0;i--)
{
if(poz[i]==x)
{
vector[++nr]=v[i];
x--;
}
}
for(i=nr;i>0;i--)
fout<<vector[i]<<' ';
fout<<"\n";
fout.close();
}
int main()
{
Citire();
Determinare_LIS();
Afisare();
return 0;
}