Pagini recente » Cod sursa (job #1458008) | Cod sursa (job #341300) | Cod sursa (job #412347) | Cod sursa (job #2558951) | Cod sursa (job #1312217)
#include <stdio.h>
#define MAX -30023
#define NMAX 500023
#define DIM 10000
char buff[DIM];
FILE *fin, *fout;
int poz = 0, n, k, temp, max = MAX, dr = 0, st = 1, p1;
bool g, f;
struct deq
{
int val;
int poz;
} d[NMAX];
int numar();
int main()
{
fin = fopen("secventa.in", "r");
fout = fopen("secventa.out", "w");
n = numar();
k = numar();
for(int i = 1; i< k; i++)
{
temp = numar();
if(!f)
{
f = 1;
dr++;
d[dr].val = temp;
d[dr].poz = i;
continue;
}
while(dr>=st && temp <= d[dr].val) dr--;
dr++;
d[dr].val = temp;
d[dr].poz = i;
}
for(int i =k; i<=n; i++)
{
while(d[st].poz <= i-k) st++;
temp = numar();
while(dr>=st && temp <= d[dr].val) dr--;
dr++;
d[dr].val = temp;
d[dr].poz = i;
if(d[st].val > max)
{
max = d[st].val;
p1 = d[dr].poz;
}
}
fprintf(fout, "%d %d %d\n", p1-k+1, p1, max);
fclose(fin);
fclose(fout);
return 0;
}
int numar()
{
int numar = 0;
while(buff[poz] < '0' || buff[poz] > '9')
{
poz++;
if(poz == DIM)
{
poz = 0;
fgets(buff, DIM, fin);
}
if(buff[poz] == '-') g = 1;
}
while(buff[poz] >= '0' && buff[poz] <='9')
{
numar = numar*10 + buff[poz]-'0';
poz++;
if(poz == DIM)
{
poz = 0;
fgets(buff, DIM, fin);
}
}
if(g)
{
g = 0;
return 0-numar;
}
return numar;
}