Cod sursa(job #1499500)

Utilizator refugiatBoni Daniel Stefan refugiat Data 10 octombrie 2015 18:32:03
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<fstream>
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
#define N 100005
int maxx,ultim[N],pred[N],v[N];
int cautbin(int val)
{
    int st=0,fin=maxx,mid,poz=0;
    while(fin>=st)
    {
        mid=(fin+st+1)>>1;
        if(ultim[mid]==0||v[ultim[mid]]>=val)
            fin=mid-1;
        else
        {
            poz=mid;
            st=mid+1;
        }
    }
    return poz;
}
int main()
{
    ifstream si;
    si.open("scmax.in");
    ofstream so;
    so.open("scmax.out");
    int n;
    si>>n;
    int i,poz;
    for(i=1;i<=n;++i)
    {
        si>>v[i];
        poz=cautbin(v[i]);
        pred[i]=ultim[poz];
        ultim[poz+1]=i;
        if(poz==maxx)
            ++maxx;
    }

    so<<maxx<<'\n';
    poz=ultim[maxx];
    i=1;
    while(poz)
    {
        ultim[i++]=v[poz];
        poz=pred[poz];
    }

    while(--i)
    {
        so<<ultim[i]<<' ';
    }
    so<<'\n';
    si.close();
    so.close();
    return 0;
}