Cod sursa(job #71971)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 12 iulie 2007 13:02:03
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define v 500//500002

int a[v],w[v],b[v];
long k,n,q,e,max=-31000,inc,sf,li,lf,l;
char c,s[1024],*p;

int getnn()
{
int rez=0,r=1;
if (c=='-')
   {
   r=-1;
   scanf("%c", &c);
   }
while (c>=48 && c<= 57)
	{
	rez=rez*10 +c-48;
//	scanf("%c", &c);
//	fgets(c,1,stdin);
	if (feof(stdin))
	   break;
	}

/*while ((c<48 || c>57) && (c!=26))
       scanf("%c", &c);*/
return rez*r;
}

void citire()
{
scanf("%ld%ld\n", &n, &k);
long i;
q=i=-1;
e=0;
//for (long i=0; i<n; i++)
  //  {
//    scanf("%d", &a[i]);
//    scanf("%c", &c);
    fgets(s,1024,stdin);
    //a[i]=getnn();
for(p=strtok(s," "); p; p=strtok(NULL," "))
    {
    a[++i]=atol(p);
//    ++i;
    ++q;
    w[q]=a[i];
    b[q]=i;
    if (b[q]-b[e]+1>k)
       ++e;
    while (w[q]<w[q-1] && q-1>=e)
	  {
	  w[q-1]=w[q];
	  b[q-1]=b[q];
	  --q;
	  }
    /**/
    l=b[q]-b[e]+1;
    //li=b[e];
    li=b[q]-k+1;
    if (li<0)
       li=0;
    lf=b[q];
    if (w[e]>max && lf-li+1>=k)
       {
       max=w[e];
       inc=li+1;
       sf=lf+1;
       }
    }
}

void scrie()
{
freopen("secventa.out","w",stdout);
printf("%ld %ld %ld\n",inc,sf,max);
fclose(stdout);     
}     

int main()
{
freopen("secventa.in","r",stdin);
citire();
scrie();
fclose(stdin);
return 0;
}