Cod sursa(job #1975494)

Utilizator otnielMercea Otniel otniel Data 1 mai 2017 09:03:17
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<iostream>
#include<fstream>
#include<string.h>
#include<algorithm>
using namespace std;
long long a[100005];
long long fina[100005];
long v[100005];
long res[100005];
long n;
bool comp(long x,long y)
{
    return a[x]<=a[y];
}
long lungime=0;

int main()
{

    ifstream f("scmax.in",fstream::in);
    ofstream g("scmax.out",fstream::out);
    f>>n;
    for(long i=0;i<n;i++)
    f>>a[i];
    for(long i=0;i<n;i++)
        res[i]=-1;
    v[0]=0;
    lungime=1;
    for(long i=1;i<n;i++)
        if(a[i]>=a[v[lungime-1]]) {v[lungime]=i;res[i]=v[lungime-1];lungime++;}
        else{

            long *r=upper_bound(v,v+lungime,i,comp);

            v[r-v]=i;
            if(r-v-1<0) res[i]=-1;
            else
            res[i]=v[r-v-1];
        }

    g<<lungime<<endl;
    long nr=0;
    fina[nr++]=a[v[lungime-1]];
    long long w=res[v[lungime-1]];
    while(w!=-1)
    {

        fina[nr++]=a[w];
        w=res[w];
    }

    for(long i=nr-1;i>=0;i--)
    g<<fina[i]<<" ";

}