Cod sursa(job #1864405)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 31 ianuarie 2017 19:03:14
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#define nmax 100001
#include <fstream>
using namespace std;
int v[nmax],n,q[nmax],p[nmax],k,poz;
ifstream f("scmax.in");
ofstream g("scmax.out");
inline int bs(int x)
{
    static int l=0,r=k,m=(l+r)/2;
    while(l<=r)
    {

        if(q[m]<=x && x<q[m+1]) return m+1;
        else if(x>=q[m+1]) l=m+1,m=(l+r)/2;
        else r=m-1,m=(l+r)/2;
    }

    return k+1;
}


int main()
{
    f>>n;
    for(int i=1; i<=n; i++) f>>v[i];
    q[1]=v[1];
    p[1]=1;
    k=1;
         for(int i=2; i<=n; i++)
            {   poz=bs(v[i]);

                q[poz]=v[i];p[i]=poz;
                if (k < poz)   k =poz;
            }

   int nr=k;

    for(int i=2;i<=k;i++) if(q[i]!=q[i-1]) ;
                            else nr--;
    g<<nr<<'\n';
    g<<q[1]<<' ';
    for(int i=2;i<=k;i++) if(q[i]!=q[i-1]) g<<q[i]<<' ';
}