Cod sursa(job #1998769)

Utilizator victoreVictor Popa victore Data 9 iulie 2017 00:31:07
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<cstdio>
#include<map>
#include<algorithm>

using namespace std;

const int nmax=5005;
map<int,int> m;
int sorted[nmax],v[nmax];
struct al
{
    int start,x;
}d[nmax];

int main()
{
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);
    int n,i,j,cnt=0,lmax;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        scanf("%d",&v[i]),sorted[i]=v[i];
    sort(sorted+1,sorted+n+1);
    for(i=1;i<=n;++i)
        if(m.find(sorted[i])==m.end())
            m[sorted[i]]=++cnt;
    for(i=1;i<=n;++i)
        v[i]=m[v[i]];
    lmax=cnt;
    int lngmax=-1;
    for(i=1;i<=n;++i)
    {
        d[i].x=1;
        d[i].start=i;
        for(j=i-1;j;j--)
            if(v[j]<v[i]&&(d[i].x<d[j].x+1 || (d[i].x==d[j].x && d[i].start<d[j].start)))
            {
                d[i].start=d[j].start;
                d[i].x=d[j].x+1;
            }
        if(d[i].x==lmax&&i-d[i].start+1>lngmax)
            lngmax=i-d[i].start+1;
    }
    printf("%d",lngmax);
}