Cod sursa(job #1860931)

Utilizator AndreiITCuriman Andrei AndreiIT Data 28 ianuarie 2017 14:49:41
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
/**
    code by purplecoder
*/
#include <fstream>
#define maxi(a, b) ( ( a > b ) ? a : b )
using namespace std;
ifstream cin("sclm.in");
ofstream cout("sclm.out");
const int MAX = 100005;
int v[MAX], dp[MAX], n, m, ans;
int main()
{
    cin>>n;
    for(int i=1; i<=n; ++i)
        cin>>v[i];
    for(int i=n; i>=1; --i)
    {
        int maxi = 0;
        for(int j=i+1; j<=n; ++j)
            if(v[j] >= v[i] and dp[j] > maxi)
                maxi = dp[j];
        dp[i] = maxi + 1;
        if(dp[i] > ans)
            ans = dp[i];
    }
    cout<<ans<<'\n';
    int last = 0;
    for(int i=1; i<=n; ++i)
    {
        if(dp[i] == ans and v[i] >= v[last])
        {
            cout<<i<<' ';
            last = i;
            ans--;
        }
    }
    return 0;
}