Cod sursa(job #2421913)

Utilizator moltComan Calin molt Data 16 mai 2019 17:51:47
Problema Subsir 2 Scor 45
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("subsir2.in");
ofstream out("subsir2.out");

int v[5005];
int r[5005];
int poz[5005];
int sol[5005];
int cnt;
int n;
int st, dr, mijl ;
int lmax;

int main()
{
    in>>n;
    for (int i = 1; i <= n; ++i) in>>v[i];


    for (int i = 1; i <= n; ++i)
    {
        st = 1;
        dr = lmax;
        while(st <= dr)
        {
            mijl = (st+dr) / 2;
            if(v[r[mijl]] <= v[i])
                st = mijl + 1;
            else
                dr = mijl - 1;
        }
        r[st] = i;
        lmax = max(lmax,st);
        poz[i] = r[st - 1];
    }

    out<<lmax<<"\n";
    int k = r[lmax];
    //sol[++cnt] = k;
    for(int i = 1; i <= lmax; ++i)
    {
        r[i] = v[k];
        sol[++cnt] = k;
        k = poz[k];
    }
    //for(int i = lmax; i >= 1; i--) cout<<r[i]<<" ";

    for (int i = cnt;i >= 1; --i)
         out<<sol[i]<<" ";

    return 0;
}