Pagini recente » Cod sursa (job #2565328) | Cod sursa (job #2226334) | Cod sursa (job #1068033) | Cod sursa (job #2857121) | Cod sursa (job #42574)
Cod sursa(job #42574)
/*
*
*
info-arena 2.0 - Arhiva - Secv
*
*
*/
#include<stdio.h>
#include<string.h>
#define INPUT "secv.in"
#define OUTPUT "secv.out"
#define INFI 2000000001
FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");
int n,k,pmin,pmax;
long a[5001],b[5001],c[5001],min,max;
void citire();
void quicks(int st, int dr);
void elimina();
void rezolva();
int main()
{
citire();
if(n==0)
fprintf(fout, "0\n");
else
if(n==1)
fprintf(fout, "1\n");
else
{
quicks(1,n);
elimina();
rezolva();
}
fclose(fin);
fclose(fout);
return 0;
}
void citire()
{
fscanf(fin, "%d", &n);
min=INFI;
max=-INFI;
pmin=pmax=0;
for(int i=1;i<=n;++i)
{
fscanf(fin, "%ld", &a[i]);
if(a[i]<min)
{
min=a[i];
pmin=i;
}
if(a[i]>=max)
{
max=a[i];
pmax=i;
}
}
memcpy(b,a,sizeof(a));
}
void quicks(int st, int dr)
{
int l=st,m=dr;
while(l!=m)
{
if((l<m&&b[l]>b[m])||(l>m&&b[l]<b[m]))
{
b[l]=b[l]+b[m];
b[m]=b[l]-b[m];
b[l]=b[l]-b[m];
l=l+m;
m=l-m;
l=l-m;
if(l<m)
--m;
else
++m;
}
else
if(l<m)
--m;
else
++m;
}
if(l!=st) quicks(st,l-1);
if(l!=dr) quicks(l+1,dr);
}
void elimina()
{
c[1]=b[1];
k=2;
for(int i=2;i<=n;++i)
if(b[i]!=b[i-1])
c[k++]=b[i];
}
void rezolva()
{
int poz,j,l;
long lungime=INFI;
while(pmin!=pmax)
{
l=0;
poz=pmin;
j=1;
for(int i=poz;i<=pmax;++i)
{
if(a[i]==min&&i!=pmin&&!l)
{
pmin=i;
l=1;
}
if(c[j]==a[i])
++j;
if(j==k)
if(lungime>i-poz+1)
lungime=i-poz+1;
}
if(pmin==poz)
break;
}
fprintf(fout, "%ld\n", lungime);
}