Cod sursa(job #659082)

Utilizator galbenugalbenu dorin galbenu Data 9 ianuarie 2012 23:33:35
Problema Subsir 2 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<iostream>
#include<fstream>
#include<cstring>
#define lmax 5001
using namespace std;
ifstream f("subsir2.in",fstream::in);
ofstream g("subsir2.out",fstream::out);
int a[lmax];
short int p[lmax],pmaxim,n,lung[lmax];
long S[lmax],maxim;
void read()
{
    short int i;
    f>>n;
     for(i=1;i<=n;i++)
      f>>a[i];
}
void phd()
{
    short int i,j;
    for(i=1;i<=n;i++)
    S[i]=i;
     for(i=n-1;i>=1;i--)
      for(j=i+1;j<=n;j++)
       if(a[i]<a[j] && S[j]+i>=S[i])
        {  lung[i]=lung[j]+1;
            S[i]=S[j]+i;
            p[i]=j;
            if(S[i]>maxim)
            maxim=S[i],pmaxim=i;
        }
}
void arata(short int x)
{   g<<x<<" ";
    if(p[x]>0)
    arata(p[x]);
}
int main()
{
    read();
    phd();
    g<<lung[pmaxim]+1<<"\n";
    arata(pmaxim);
    f.close();
    g.close();
    return 0;
}