Cod sursa(job #387254)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 27 ianuarie 2010 10:14:32
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<cstdio>
int n,a[100001],lung[100001],tata[100001],vec[100001],x[100001];
void scan(int poz)
{
    int i=0,min=200000,pozmin=0,pas=1<<17;
    for(i=0;pas;pas>>=1)
        if(x[0]>i+pas)
            if(a[x[i+pas]]<=a[poz])
            {
                i+=pas;
            }
    if(a[x[i+1]]>=a[poz])
    {
        min=x[i+1];
        pozmin=i+1;
    }
    else
    {
        pozmin=0;
        min=0;
    }
    if(pozmin!=0)
    {
        tata[i]=x[pozmin];
        x[pozmin]=poz;
        lung[poz]=lung[pozmin]+1;
    }
    else
    {
        tata[i]=0;
        x[++x[0]]=poz;
        lung[poz]=1;
    }
}
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
    {
        lung[i]=0;
        scan(i);
    }
    int max=0,pozmax=0;
    for(int i=1;i<=n;i++)
        if(lung[i]>max)
        {
            max=lung[i];
            pozmax=i;
        }
    return 0;
}