Cod sursa(job #1746191)

Utilizator Y0da1NUME JMECHER Y0da1 Data 22 august 2016 19:23:38
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
int n, a[100002];
int q [1000002];
int binsearch(int  * v, int l, int r, int key)
{
    while(r-l>1)
    {
        int m=l+(r-l)/2;
        if(v[m]>=key)
            r=m;
        else
            l=m;
    }
    return r;
}
int Lis(int * v)
{
    if(!n)
        return 0;
    int length=1;
    q[0]=v[0];
    for(int i=1;i<n;++i)
    {
        if (v[i] < q[0])
            q[0]=v[i];
        else if (v[i] > q[length-1])
        {
            q[length]=v[i];
            ++length;
        }
        else
            q[binsearch(q, -1, length-1, v[i])]=v[i];

    }
    return length;
}
int main()
{
    ifstream g ("scmax.in");
    ofstream h ("scmax.out");
    g>>n;
    for(int i=0;i<n;i++)
        g>>a[i];
    int l=Lis(a);
    h<<l<<"\n";
    for (int i=0;i<l;++i)
        h<<q[i]<<" ";
    g.close();
    h.close();
    return 0;
}