Pagini recente » Cod sursa (job #989281) | Cod sursa (job #1192524) | Cod sursa (job #801632) | Cod sursa (job #2550018) | Cod sursa (job #1096168)
//subsir crescator maximal
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
#define Nmax 100005
int n,a[Nmax],L,ante[Nmax],Tata[Nmax];
void init()
{
f>>n;
for(int i=1;i<=n;i++) f>>a[i];
}
void SCMAX()
{
ante[1]=1; L=1;
for(int i=2;i<=n;i++)
{
int st=1,dr=L;
while(st<=dr)
{
int mij=(st+dr)/2;
if(a[i]>a[ante[mij]]) st=mij+1;
else dr=mij-1;
}
if(st>L) L++;
ante[st]=i; Tata[i]=ante[st-1];
}
}
void afisare(int x)
{
if(x!=0)
{
afisare(Tata[x]);//afisare de tata lui x
g<<a[x]<<" ";
}
}
int main ()
{
init();
SCMAX();
g<<L<<'\n';
afisare(ante[L]);
return 0;
}