Cod sursa(job #1969397)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 18 aprilie 2017 14:07:41
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>
#define Nmax  100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[Nmax];
int best[Nmax];
int t[Nmax];
int lg[Nmax];
int nr,n,maxx,k;
void afs(int x)
{
   if(x>0)
   {
       afs(t[x]);
       g<<v[x]<<' ';
   }
}
inline int CB(const int &x)
{
   int p,q,m;
   p=0;
   q=nr;
   while(p<=q)
   {
    m=(p+q)/2;
    if(v[lg[m]]<x and v[lg[m+1]]>=x)
        return m;
    else
    {
        if(v[lg[m+1]]<x)
                p=m+1;
        else q=m-1;
    }
   }
   return nr;
}
int main()
{int i,j, poz;
nr=1;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
best[1]=lg[1]=1;
for(i=2;i<=n;i++)
{
    poz=CB(v[i]);
    t[i]=lg[poz];
    best[i]=poz+1;
    lg[poz+1]=i;
    if(nr<=poz)  nr=poz+1;
}
for(i=1;i<=n;i++)
    if(best[i]>maxx)
    {
        maxx=best[i];
        poz=i;
    }
g<<maxx<<'\n';
afs(poz);

   return 0;
}