Cod sursa(job #2067713)

Utilizator razvancostacheCostache Razvan razvancostache Data 16 noiembrie 2017 19:33:10
Problema Algoritmul lui Euclid extins Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("secvdist.in");
ofstream out("secvdist.out");

const int N=1000001;

int v[N],dmax[N],dmin[N];

int main()
{
    int j,sc,lmax,stmax,drmax,k,n,stmin,drmin,i;
    stmax=0;
    stmin=0;
    drmax=-1;
    drmin=-1;
    in>>n>>k;
    j=0;
    sc=0;
    for(i=0;i<n;i++)
        in>>v[i];
    for(i=0; i<n; i++)
    {
        while(stmax<=drmax && v[i]>=v[dmax[drmax]])
        {
            drmax--;
        }
        dmax[++drmax]=i;
        while(stmin<=drmin && v[i]<=v[dmin[drmin]])
        {
            drmin--;
        }
        dmin[++drmin]=i;
        while(j<=i && v[dmax[stmax]]-v[dmin[stmin]]>k)
        {
            if(dmax[stmax]==j)
            {
                stmax++;
            }
            if(dmin[stmin]==j)
            {
                stmin++;
            }
            j++;
        }
        //out << j << " " << i << "\n";
        lmax=max(lmax,i-j+1);
    }
    out<<lmax;

    return 0;
}