Cod sursa(job #2245644)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 25 septembrie 2018 17:57:25
Problema Secv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>
#define Dim 5002
#define Max 2000000000
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");
int N;
long A[Dim],S[Dim],cnt,poz,ans=Max,el;

struct info
{
  int start;
  long nr;
}V[Dim];

int CB(int x)
{
    int st=1,dr=N;
    while(st<dr)
    {
        int mij=(st+dr)/2;
        if(x<=S[mij]) dr=mij;
        else st=mij+1;
    }
    return st;
}

int main()
{
   f>>N;
   for(int i=1;i<=N;i++)
   {
       f>>A[i];
       S[i]=A[i];
   }
   sort(S+1,S+N+1);
   for(long i=2;i<=N;i++) el=V[i].nr-V[i-1].nr;
   if(el==1) g<<1;
   else
   for(long i=1;i<=N;i++)
   {
       if(A[i]==S[1])
       {
           V[++cnt].start=i;
           V[cnt].nr=A[i];
       }
       else
       {
           poz=CB(A[i]);
           el=S[poz-1];
        for(long j=1;j<=cnt;j++)
       {
          if(V[j].nr==el) V[j].nr=A[i];
          if(V[j].nr==S[N])
          {
              ans=min(ans,i-V[j].start+1);
              V[j].nr=-2;
          }

       }

       }
   }
   if(ans!=Max)
   g<<ans;
   else g<<-1;
}