Cod sursa(job #1771566)

Utilizator CrystyAngelDinu Cristian CrystyAngel Data 5 octombrie 2016 19:35:53
Problema Subsir 2 Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <iostream>
#include <fstream>

using namespace std;

#define nmax 5100

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

int v[nmax];
int q[nmax];
int dp[nmax];
int ans[nmax];
int n,i,s,d,p,l,m;

int main()
{
    fin>>n;
    v[0]=1000000000;
    for(i=1; i<=n; ++i)
    {
        fin>>v[i];
        s=1;
        d=l;
        p=0;
        while(s<=d)
        {
            m=(s+d)/2;
            if(v[i]>=v[q[m]])
                s=m+1,p=m;
            else
                d=m-1;
        }
        if(p+1>l)
            ++l;
        q[p+1]=i;
        dp[i]=p+1;
    }
    for(i=1; i<=n; ++i)
        if(v[i]<v[ans[dp[i]]])
            ans[dp[i]]=i;
    fout<<l<<'\n';
    for(i=1; i<=l; ++i)
        fout<<ans[i]<<' ';
}