Cod sursa(job #1997633)

Utilizator GeoeyMexicanuBadita George GeoeyMexicanu Data 4 iulie 2017 23:03:33
Problema Subsir 2 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>
#define N 5010
using namespace std;
ifstream f("subsir2.in");
ofstream g("subsir2.out");
int i,j,n,m,k,x[N],v[N],p[N],b[N],lo,hi,mi,L,t=1000010,min1=1000010;
void af(int k)
{
    if(k==0){
        g<<L<<'\n';
        return;
    }
    af(b[k]);
    g<<k<<' ';
}
int main()
{
    f>>n;
    int ok=0;
    int pozm=1,pozm2=n+10;
    for(i=1;i<=n;i++)
    {
        f>>x[i];
        if(min1>x[i])
        {
            min1=x[i];
            pozm=i;
        }
    }
    for(i=pozm+1;i<=n;i++)
    {
        if(x[i]>min1)
        {
            if(x[i]<t)
            {
                t=x[i];
                pozm2=i;
            }
        }
    }
    v[1]=x[pozm];
    p[1]=pozm;
    b[pozm]=0;
    if(pozm2<=n){
    v[2]=x[pozm2];
    p[2]=pozm2;
    b[pozm2]=p[1];
    L=2;
    }
    else
        L=1;
    for(i=pozm2+1;i<=n;i++)
    {
        lo=0;
        hi=L+1;
        while(hi-lo>1)
        {
            mi=(lo+hi)/2;
            if(x[i]<v[mi])
                hi=mi;
            else
                lo=mi;
        }
        if(hi==L+1)
            L++;
        v[hi]=x[i];
        p[hi]=i;
        b[i]=p[lo];
    }
    af(p[L]);
    return 0;
}