Pagini recente » Cod sursa (job #2262730) | Cod sursa (job #1484274) | Cod sursa (job #2499490) | Cod sursa (job #2740008) | Cod sursa (job #1312281)
#include <stdio.h>
#define DIM 10023
#define NMAX 500023
#define inf -30023
FILE *fin, *fout;
int n, k, temp, st = 1, dr = 0, poz = 0, p, max= inf;
char buff[DIM];
void citeste(int &numar)
{
numar = 0;
char semn = '+';
while(buff[poz] > '9' || buff[poz] < '0')
{
semn = buff[poz];
poz++;
if(poz == DIM)
{
poz = 0;
fgets(buff, DIM, fin);
}
}
while(buff[poz] >= '0' && buff[poz] <= '9')
{
numar = numar*10 + buff[poz] - '0';
poz++;
if(poz == DIM)
{
poz = 0;
fgets(buff, DIM, fin);
}
}
if(semn == '-')
{
numar = -numar;
}
}
struct chestie
{
int val;
int pos;
} deq[NMAX];
int main()
{
fin = fopen("secventa.in", "r");
fout = fopen("secventa.out", "w");
//citeste(n);
//citeste(k);
fscanf(fin, "%d%d", &n, &k);
for(int i = 1; i< k; i++)
{
//citeste(temp);
fscanf(fin, "%d", &temp);
while(temp <= deq[dr].val && dr >= st)
{
dr --;
}
dr++;
deq[dr].val = temp;
deq[dr].pos = i;
}
for(int i = k; i<= n; i++)
{
if(deq[st].pos +k <= i) st++;
//citeste(temp);
fscanf(fin, "%d", &temp);
while(temp <= deq[dr].val && dr >= st)
{
dr --;
}
dr++;
deq[dr].val = temp;
deq[dr].pos = i;
if(deq[st].val > max)
{
max = deq[st].val;
p = deq[dr].pos;
}
}
if(deq[st].val > max)
{
max = deq[st].val;
p = deq[dr].pos;
}
fprintf(fout, "%d %d %d\n", p-k+1, p, max);
fclose(fin);
fclose(fout);
return 0;
}