Cod sursa(job #2107201)

Utilizator pigwingsAntohi Vasile pigwings Data 16 ianuarie 2018 20:43:48
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include<vector>
#include<fstream>
#define nn 100001
#include<stack>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[nn],i,n;
int binar (int arr[],vector<int> &indici,int l,int r,int key)
{
    while(r-l>1)
    {
        int m=l+(r-l)/2;
        if(arr[indici[m]]>=key)
            r=m;
        else l=m;
    }
    return r;
}

int main ()
{
    f>>n;
    for(i=0;i<n;i++)
        f>>v[i];
    vector<int>idici(n,0);
    vector<int>fost(n,-1);
    int lungime =1;
    for(i=1;i<n;i++)
    {
        if(v[i]<v[idici[0]])idici[0]=i;
        else if (v[i]>v[idici[lungime-1]])
        {
            fost[i]=idici[lungime-1];
            idici[lungime++]=i;
        }
        else {
            int pos =binar(v,idici,-1,lungime-1,v[i]);
            fost[i]=idici[pos-1];
            idici[pos]=i;
        }
    }
    stack<int>s;
    for(int i=idici[lungime-1];i>=0;i=fost[i])
        s.push(v[i]);

        g<<s.size()<<endl;
        while(s.size()!=0)
        {
            g<<s.top()<<" ";
            s.pop();
        }

}