Cod sursa(job #2063326)

Utilizator cicero23catalin viorel cicero23 Data 11 noiembrie 2017 10:49:26
Problema Subsir 2 Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <climits>
#include <fstream>
#define inf INT_MAX
using namespace std;
ifstream f("subsir2.in");
ofstream g("subsir2.out");
int a[5001],l[5001];
int main()
{
    int n,i,mini,maxi,j;
    f>>n;
    for(i=1; i<=n; i++)
        f>>a[i];
    for(i=n; i>=1; i--)
    {
        for(j=i+1,mini=inf; j<=n; j++)
            if(a[j]>=a[i]&&a[j]<mini)
            {
                mini=min(mini,a[j]);
                l[i]=min(l[i],l[j]+1);
                if(!l[i])l[i]=l[j]+1;
            }
        if(l[i]==0)l[i]=1;
    }
    for(i=1,mini=inf,maxi=inf; i<=n; i++)
    {
        if(a[i]<mini)
        {
            mini=a[i];
            maxi=min(maxi,l[i]);
        }
    }
    g<<maxi<<'\n';
    int last=-inf,k,poz=0;
    for(k=maxi; k>0; k--)
    {
        mini=inf;
        maxi=inf;
        for(i=poz+1; i<=n; i++)
            if(l[i]==k&&a[i]>=last&&a[i]<mini)
            {
                poz=i;
                mini=a[i];
            }
            else if(a[i]>=last&&a[i]<mini)mini=a[i];
        cout<<poz<<" ";
        last=a[poz];
    }
    return 0;
}