Pagini recente » Cod sursa (job #2486996) | Cod sursa (job #1626478) | Cod sursa (job #2262655) | Cod sursa (job #2287875) | Cod sursa (job #42566)
Cod sursa(job #42566)
/*
*
*
info-arena 2.0 - Arhiva - Secv
*
*
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define INPUT "secv.in"
#define OUTPUT "secv.out"
#define INFI 2000000001
FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");
typedef struct elem
{
long valoare;
struct elem *urm;
};
typedef elem *reper;
reper p;
long min,max,a[5001];
int pmin,pmax,n;
void citire();
void rezolvare();
int main()
{
p=new elem;
p->valoare=-1;
p->urm=NULL;
citire();
if(n==1)
fprintf(fout, "1\n");
else
if(n==0)
fprintf(fout, "0\n");
else
rezolvare();
fclose(fin);
fclose(fout);
return 0;
}
void citire()
{
fscanf(fin, "%d", &n);
int l=0;
min=INFI;
max=-INFI;
pmin=0;
pmax=0;
reper adr,adr2;
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;
}
adr=new elem;
adr->valoare=a[i];
adr->urm=NULL;
adr2=p;
l=0;
while(adr2!=NULL&&!l)
{
if(adr2->valoare<a[i]&&adr2->urm->valoare>a[i])
{
adr->urm=adr2->urm;
adr2->urm=adr;
l=1;
}
if(adr2->valoare==a[i])
l=1;
if(!l&&adr2->urm==NULL)
{
adr2->urm=adr;
l=1;
}
adr2=adr2->urm;
}
}
}
void rezolvare()
{
int poz=0,l=0,iesi=0;
long lungime=INFI;
reper adr;
while(pmin!=pmax)
{
adr=p;
adr=adr->urm;
poz=pmin;
l=0;
iesi=0;
for(int i=poz;i<=pmax&&!iesi;++i)
{
if(a[i]==min&&i!=poz&&!l)
{
pmin=i;
l=1;
}
if(a[i]==adr->valoare)
adr=adr->urm;
if(adr==NULL)
{
if(lungime>i-poz+1)
lungime=i-poz+1;
iesi=1;
}
if(i==pmax&&adr!=NULL)
pmin=pmax;
}
if(poz==pmin)
break;
}
fprintf(fout, "%ld\n", lungime);
}