Cod sursa(job #1503436)

Utilizator refugiatBoni Daniel Stefan refugiat Data 16 octombrie 2015 08:19:19
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<iostream>
#include<fstream>
using namespace std;
const int NMAX=100005;
int v[NMAX];
int ultim[NMAX];
int pred[NMAX];
int lung[NMAX];
int maxx;
inline int cautbin(int val)
{
    int st=0,fin=maxx,mid,p=0;
    while(st<=fin)
    {
        mid=(st+fin+1)>>1;
        if(v[ultim[mid]]>=val||ultim[mid]==0)
        {
            fin=mid-1;
        }
        else
        {
            st=mid+1;
            p=mid;
        }
    }
    if(p==maxx)
        ++maxx;
    return p;
}
int main()
{
    ifstream si;
    si.open("scmax.in");
    ofstream so;
    so.open("scmax.out");
    int n;
    si>>n;
    int poz,i;
    for(i=1;i<=n;++i)
    {
        si>>v[i];
        poz=cautbin(v[i]);
        lung[i]=poz+1;
        pred[i]=ultim[poz];
        ultim[poz+1]=i;
    }
    so<<maxx<<'\n';
    poz=ultim[maxx];
    i=1;
    while(poz)
    {
        ultim[i++]=poz;
        poz=pred[poz];
    }
    for(i=maxx;i;--i)
        so<<v[ultim[i]]<<' ';
    so<<'\n';
    si.close();
    so.close();
    return 0;
}