Pagini recente » Cod sursa (job #2652793) | Cod sursa (job #2312267) | Cod sursa (job #3279382) | Borderou de evaluare (job #2321831) | Cod sursa (job #399011)
Cod sursa(job #399011)
#include <stdio.h>
#include <deque>
#define NMAX 500005
#define llong long long
FILE *fin,*fout;
struct qq{
short int x;
int poz;
};
int n, k;
qq aux, ics;
qq a[NMAX];
int main()
{int i, min,start,stop,max,pozmin,first,last;
fin = fopen ("secventa.in","rt");
fout = fopen ("secventa.out","wt");
fscanf(fin,"%d %d",&n,&k);
fscanf(fin,"%hd", &aux.x);
first=last=0;
aux.poz = 0;
a[0] = aux;
max = 0;
for (i = 1; i < k; i++)
{
fscanf(fin,"%hd", &aux.x);
aux.poz = i;
while (max >= 0 && a[last].x > aux.x)
{
last--;
max --;
}
a[++last] = aux;
max++;
}
min = a[first].x;
pozmin = 0;
for (i = k; i < n; i++)
{
fscanf(fin,"%hd", &aux.x);
aux.poz = i;
if (a[first].poz <= i - k)
{
first++;
max--;
}
while (max >= 0 && a[last].x > aux.x)
{
last--;
max --;
}
a[++last] = aux;
max++;
if (min < a[first].x)
{
min = a[first].x;
pozmin = i - k + 1;
}
}
start = pozmin + 1;
stop = pozmin +k;
fprintf(fout,"%hd %hd %hd\n",start,stop,min);
fclose(fin);
fclose(fout);
return 0;
}