Cod sursa(job #908863)

Utilizator vladvaldezVlad Dimulescu vladvaldez Data 10 martie 2013 09:26:31
Problema Secv Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#include <algorithm>


using namespace std;
FILE *f=fopen("secv.in","r");
FILE *g=fopen("secv.out","w");

struct nod
{
 int x;
 int y;
}a[5005];

int v[5005],n,nr,i,poz,r,c[5005],ct;

int caut(int x)
{
  int p,m,u,mx;

  mx=0;
  p=1;
  u=nr;
  while (p<=u)
  {
    m=(p+u)/2;
    if(a[m].x<x)
    {
       if(m>mx)mx=m;
       p=m+1;
    }
    else if (a[m].x==x)return -1;
    else u=m-1;
  }
 return mx;
 }

int main()
{
 fscanf(f,"%d",&n);
 for(i=1;i<=n;i++){
  fscanf(f,"%d",&v[i]);
 c[i]=v[i];
 }


 stable_sort(c+1,c+n+1);
 for(i=1;i<=n;i++)
 if (c[i]!=c[i-1])ct++;


  nr=1;
  a[1].x=v[1];
for(i=2;i<=n;i++)
   {
    poz=caut(v[i]);
    if (poz==nr)
    {
     nr++;
     a[nr].x=v[i];
     a[nr].y=i;
    }
    else if (poz!=-1){a[poz+1].x=v[i];a[poz+1].y=i;}

   }

 r=a[nr].y-a[1].y+1;
if (nr==ct)fprintf(g,"%d",r);
else fprintf(f,"%d",-1);
    fclose(g);
    return 0;
}