Cod sursa(job #1083395)

Utilizator marianitaTurcu Maria marianita Data 15 ianuarie 2014 22:50:41
Problema Secv Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include<fstream>
using namespace std;
int v[50001],a[50001],n,i,s,j,aux, c[50001];
int pozitie(int ls, int ld)
{
    int i=ls,j=ld,di=0,dj=1,x;
    while(i<j)
    {
        if(a[i]>a[j])
        {x=a[i];a[i]=a[j];a[j]=x;
          x=di;di=dj;dj=x;
        }
        i=i+di;j=j-dj;
    }
    return i;
}
void quick(int ls,int ld)
{int k;
    if(ls<ld)
    {
        k=pozitie(ls,ld);
        quick(ls,k-1);
        quick(k+1,ld);
    }
}

int main()
{

    ifstream f("secv.in");
     ofstream g("secv.out");
     f>>n;
     for(i=0;i<n;i++)
     {f>>v[i];a[i]=v[i];}
    /*do{s=1;
     for(i=0;i<n-1;i++)
     if(a[i]>a[i+1])
     {
         aux=a[i];a[i]=a[i+1];a[i+1]=aux;
         s=0;
     }
     }while(s==0);*/
     quick(0,n-1);
     i=0;
     j=1;
     while(j<n)
     {
         if(a[i]==a[j])
         j++;
         else
         {a[i+1]=a[j];
         i++;j++;}
     }
     int m=i+1, M=0, L;
     L=n;
     //for(i=0;i<m;i++)
     //cout<<a[i]<<" ";
     c[0]=1;a[0]=0;
     for(i=1;i<n;i++)
     {c[i]=1;a[i]=i;
     for(j=0;j<i;j++)
     if(v[i]>v[j])
     {if(c[j]+1>c[i])
     {c[i]=c[j]+1;
     a[i]=a[j];
     if(c[i]==m)
     if(L>i-a[i]+1)
     L=i-a[i]+1;
     if(M<c[i])M=c[i];}}}

      if(M==m)
     g<<L;
     else
     g<<"-1";
f.close();
g.close();

    return 0;
}