Pagini recente » Cod sursa (job #3207438) | Cod sursa (job #120652) | Cod sursa (job #2514048) | Cod sursa (job #1927069) | Cod sursa (job #89289)
Cod sursa(job #89289)
#include <cstdio>
#include <string>
using namespace std;
struct deque
{
int pos,val;
} q[500000];
int v[500000];
int n,k;
int d1,d2;
int last,first,baza;
void citire()
{
char c;
int i=-1;
freopen("secventa.in","r",stdin);
scanf("%d%d",&n,&k);
getc(stdin);
while (! feof(stdin))
{
i++;
c=getc(stdin);
if (c=='-')
v[i]=-1*(getc(stdin)-'0');
else
v[i]=c-'0';
if (!feof(stdin))
c=getc(stdin);
while (c !=32 && !feof(stdin))
{
v[i]=v[i]*10+c-'0';
c=getc(stdin);
}
}
}
void calcul()
{
d1=0;
d2=0;
q[0].val=v[0];
q[0].pos=0;
for (int i=1;i<n;i++)
{
while (q[d1].pos<=i-k && d1<=d2)
d1++;
while (q[d2].val>=v[i] && d2>=d1)
d2--;
d2++;
q[d2].val=v[i];
q[d2].pos=i;
if (((q[d1].val > baza) && (i>k-1)) || (i==k-1))
{
baza=q[d1].val;
first=i-k+2;
last=i+1;
}
}
}
int main()
{
citire();
calcul();
freopen("secventa.out","w",stdout);
printf("%d %d %d",first,last,baza);
fclose(stdout);
return 0;
}