Cod sursa(job #2131407)

Utilizator anamariazidaruZidaru Ana-Maria anamariazidaru Data 14 februarie 2018 18:10:23
Problema Subsir crescator maximal Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f ("scmax.in");
ofstream g ("scmax.out");
const int N=100001;
int m, v[N], pred[N], n, poz[N], lung[N], val[N];

int cautb(int x);
void subsir (int p);

int main()
{
    int i, l, j;
    f>>n;
    for (i=0; i<n; i++)
    {
        f>>v[i];
    }
    m=0;
    for (i=0; i<n; i++)
    {
        j=cautb(v[i]);
        if (j==m)
        {
            m++;
        }
        val[j+1]=v[i];
        poz[j+1]=i;
        lung[i]=j+1;
        pred[i]=poz[j];
    }
    g<<m<<'\n';
    subsir(poz[m]);
    return 0;
}

int cautb(int x)
{
    int r=0, pas=1<<16;
    while (pas!=0)
    {
        if(r+pas<=m && val[r+pas]<x)
        {
            r+=pas;
        }
        pas /= 2;
    }
    return r;
}

void subsir(int p)
{
    if(pred[p]!=0)
    {
        subsir(pred[p]);
    }
    g<<v[p]<<" ";
}