Cod sursa(job #2061735)

Utilizator tiberiu.bucur17Tiberiu Constantin Emanoil Bucur tiberiu.bucur17 Data 9 noiembrie 2017 17:42:59
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <cstdio>
#include <cctype>
#define BUF_SIZE 131072
#define INF 30001
#define MAXN 500000
char buf[BUF_SIZE];
FILE *fin,*fout;
int dq[MAXN],poz[MAXN],pos=BUF_SIZE,st,vf,maxim,stmax,drmax,crt;
inline char getch()
{
    if(pos==BUF_SIZE)
    {
        fread(buf,BUF_SIZE,1,fin);
        pos=0;
    }
    return buf[pos++];
}
inline int getnr()
{
    int x=0;
    char ch,semn=1;
    ch=getch();
    while(isspace(ch))
        ch=getch();
    if(ch=='-')
        semn*=-1,ch=getch();
    while(isdigit(ch))
    {
        x=x*10+ch-'0';
        ch=getch();
    }
    return x*semn;
}
inline void parcurgere(int x,int i)
{
    while(vf>=st && dq[vf]>x)
        vf--;
    dq[++vf]=x;
    poz[vf]=i;
}
int main()
{
    fin=fopen("secventa.in","r");
    fout=fopen("secventa.out","w");
    int k,n,x;
    n=getnr();k=getnr();
    vf=-1;
    for(int i=0;i<k;i++)
    {
        x=getnr();
        parcurgere(x,i);
    }
    maxim=dq[0];stmax=0;drmax=k-1;
    for(int i=k;i<n;i++)
    {
        x=getnr();
        parcurgere(x,i);
        if(crt==poz[st])
            st++;
        crt++;
        if(dq[st]>maxim)
        {
            maxim=dq[st];
            stmax=crt;drmax=i;
        }
    }
    fprintf(fout,"%d %d %d",stmax+1,drmax+1,maxim);
    fclose(fin);
    fclose(fout);
    return 0;
}