Cod sursa(job #2040461)

Utilizator Garen456Paun Tudor Garen456 Data 15 octombrie 2017 20:24:36
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
int n,a[5005],c[5005],dr[5005];
vector <int> V;
map <int ,int>m;
int main()
{  fin>>n;
  int i,mini=50005;
  for(i=1;i<=n;++i)
  { fin>>a[i];
      if(m[a[i]]==0)
      V.push_back(a[i]);
      m[a[i]]=1;
  }
   sort(V.begin(),V.end());
   for(i=0;i<V.size();++i)
       m[V[i]]=i+1;

   for(i=1;i<=V.size();++i)
      c[i]=-1;

   for(i=1;i<=n;++i)
    if(m[a[i]]==1)
       {c[1]=1;  dr[1]=i;   if( m[a[i]]==V.size())
            if(c[m[a[i]]]!=-1 )
           mini=min(mini,c[m[a[i]]]);  //fout<<c[m[a[i]]-1]<<"\n";
       }
    else
    { dr[m[a[i]]]=i;
    //fout<<c[m[a[i]]-1]<<"\n";
        if(c[m[a[i]]-1]!=-1)
             {
                // fout<<i<<" "<<dr[m[a[i]]-1]<<"\n";
             c[m[a[i]]]=c[m[a[i]]-1]+i-dr[ m[a[i]]-1];

          // fout<<a[i]<<" "<<c[m[a[i]]]<<"\n";
             }
        if( m[a[i]]==V.size())
            if(c[m[a[i]]]!=-1 )
           mini=min(mini,c[m[a[i]]]);
    }

   if(mini!=50005) fout<<mini;
   else fout<<-1;


    return 0;
}