Cod sursa(job #1814268)
Utilizator | Csiki Francisc Alexandru Feri | Data | 23 noiembrie 2016 20:05:45 |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.67 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n,v[100001],x[100001],pred[100001],m;
int caut(int k)
{
int i,pas=1<<16;
while(pas!=0)
{
if(pas+i<=m && v[x[i+pas]]<k)
{
i+=pas;
}
pas/=2;
}
return i;
}
int main()
{
int i,j;
in>>n;
for(i=1;i<=n;i++)
{
in>>v[i];
}
m=0;
x[++m]=1;
for(i=2;i<=n;i++)
{
j=caut(v[i]);
pred[i]=x[j];
x[j+1]=i;
if(j+1>m)
m++;
// out<<x[j+1]<<" ";
}
for(i=1;i<=m;i++)
{
out<<v[x[i]]<<" ";
}
return 0;
}