Pagini recente » Cod sursa (job #232942) | Cod sursa (job #1306545) | Cod sursa (job #3175099) | Cod sursa (job #966151) | Cod sursa (job #1473925)
#include <bits/stdc++.h>
#define Dim 500005
using namespace std;
int q[Dim];
long ind[Dim];
int n, k;
int a[Dim];
char buffer[6*Dim];
void Citire()
{
freopen("secventa.in", "r", stdin);
scanf("%d %d\n", &n, &k);
fgets(buffer, sizeof(buffer), stdin);
int ind = 1, sign = 1, sizebf = strlen(buffer);
for(int i = 0; i < sizebf; ++i){
if(buffer[i]=='-') sign = -1;
else if(buffer[i] >= '0' && buffer[i] <= '9')
a[ind]= a[ind]*10 + (buffer[i]-'0');
else a[ind++]*=sign, sign = 1;
}
}
int main()
{
int x, maxim, poz, pr, ul, i, p ;
Citire();
// calculez minimul din primele k:
pr = 0 ; ul = -1 ;
for (i=1; i<=k; i++)
{
x = a[i];
while ((pr<=ul)&&(q[ul] >= x)) ul-- ;
q[++ul] = x ;
ind[ul] = i ;
}
maxim = q[pr] ;
poz = 1 ;
p = 1;
// calculez restul:
for ( ; i<=n; i++)
{
x = a[i];
while ((q[ul] >= x) && (pr<=ul)) ul-- ;
q[++ul] = x ;
ind[ul] = i ;
p++ ;
if (ind[pr] <= i-k) pr++ ;
if (maxim < q[pr]) { maxim = q[pr] ;poz = p; }
}
freopen("secventa.out", "w", stdout);
for (i = 1; i <= n; i++)
printf("%d ", a[i]);
printf("\n\n");
printf("%d %d %d\n", poz, (poz + k - 1), maxim);
return 0 ;
}