Cod sursa(job #2446758)

Utilizator patrickdanDan patrick patrickdan Data 10 august 2019 17:32:10
Problema Secventa Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include<cstring>
using namespace std;
FILE *fin,*fout;
char ch[1000001];
int v[500001];
int d[500001];
int main()
{
    fin=fopen("secventa.in","r");
    int n,k,i,st,dr,max1,poz,first,val,nr;
    fscanf(fin,"%d%d\n",&n,&k);
    fgets(ch+1,600000,fin);
    fclose(fin);
    nr=0;
    val=0;
    first=1;
    for(i=1;i<=strlen(ch+1);i++)
    {
    if(ch[i]==' '){
        v[++nr]=val*first;
        val=0;
        first=1;
    }
    if(ch[i]=='-')
        first=-first;
    if(ch[i]>='0' && ch[i]<='9')
        val=val*10+ch[i]-'0';
    }
    v[++nr]=val*first;
    st=1;dr=0;
    max1=-2000000005;poz=0;
    for(i=1;i<=n;i++)
    {
        if(d[st]==i-k)++st;
        while(st<=dr && v[d[dr]]>=v[i])--dr;
        d[++dr]=i;
        if(i>=k && st<=dr && v[d[st]]>max1)
        {
            max1=v[d[st]];
            poz=i;
        }
    }
    fout=fopen("secventa.out","w");
    fprintf(fout,"%d %d %d",poz-k+1,poz,max1);
    fclose(fout);
    return 0;
}