Cod sursa(job #1024863)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 9 noiembrie 2013 11:16:18
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
//#include <fstream>
#include <cstdio>
#include <cstring>
using namespace std;
FILE *f=fopen("secventa.in","r");
FILE *g=fopen("secventa.out","w");
int L,n,k,t,maxim=-500000,x;
int v[500011],deq[500011];
char s[7*500011],*q,ch;
int main(void){
    register int i=0,p,u;

   // f>>n>>k;
    fscanf(f,"%d %d\n",&n,&k);
    t=1;
    fgets(s,sizeof(s),f);
    deq[1]=1;
    p=u=1;
    q=s;
    while(*q!='\0' && *q!='\n'){
        if(*q==' '){
            x*=t;
            v[++i]=x;
            while(p<=u && v[i]<v[deq[u]])
                u--;
            deq[++u]=i;
            if(i-deq[p]==k)
                p++;
            if(i>=k){
                if(v[deq[p]]>maxim){
                    maxim=v[deq[p]];
                }
            }
            x=0,t=1;
        }
        else if(*q=='-')
            t=-1;
        else
            x=x*10+(*q-'0');
        q++;
    }

    x*=t;
    v[++i]=x;
    while(p<=u && v[i]<v[deq[u]])
        u--;
    deq[++u]=i;
    if(i-deq[p]==k)
        p++;
    if(i>=k){
        if(v[deq[p]]>maxim){
            maxim=v[deq[p]];
        }
    }
    x=0,t=1;

    int dr,st;
    while(deq[p]+k-1<=n){
        if(v[deq[p]]>maxim){
            maxim=v[deq[p]];
            st=deq[p];
            dr=deq[u];
        }
        p++;
    }
    fprintf(g,"%d %d %d",maxim,dr-k+1,dr);
    return 0;
}