Cod sursa(job #2204957)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 17 mai 2018 12:58:20
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <bitset>
#define DIMBUFF 100000

using namespace std;
FILE *fin=fopen ("secventa.in","r");
FILE *fout=fopen ("secventa.out","w");
int n,k,i,u,p,d[500010],v[500010],ok,maxi,maxok,dr;
char buff[DIMBUFF];int pp;

int numar() {
    int val = 0;
    while (!(buff[pp] >= '0' && buff[pp] <= '9')) {
        pp++;
        if (pp == DIMBUFF) {
            fread(buff, 1, DIMBUFF, fin);
            pp=0;
        }
    }
    while (buff[pp] >= '0' && buff[pp] <= '9') {
        val = val*10 + buff[pp] - '0';
        pp++;
        if (pp == DIMBUFF) {
            fread(buff, 1, DIMBUFF, fin);
            pp=0;
        }
    }
    return val;
}


int main()
{
    fread(buff, 1, DIMBUFF, fin);
    n=numar();
    k=numar();
    maxi=-30010;
    for(i=1;i<=n;i++)
        v[i]=numar();
    ok=0;
    p=1;
    u=1;
    d[p]=1;
    for(i=2;i<=n;i++)
    {
        while(p<=u&&v[i]<=v[d[u]])
            u--;
        u++;
        d[u]=i;
        if(i-d[p]==k)
            p++;
        if(i>=k)
        {
            ok++;
            if(maxi<v[d[p]])
            {
                maxi=v[d[p]];
                maxok=ok;
            }
        }
    }
    fprintf (fout,"%d %d %d",maxok, maxok+k-1, maxi);
    //fout<<maxok<<" "<<maxok+k-1<<" "<<maxi;
    return 0;
}