Cod sursa(job #2510736)

Utilizator Rares31100Popa Rares Rares31100 Data 17 decembrie 2019 11:34:31
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>

using namespace std;

int lung,dist_vec;
short int vila[100001];
int coada_min[100001],st_min=1,dr_min; //cozile retin pozitiile
int coada_max[100001],st_max=1,dr_max;
int dif_max=0;

ifstream cin("vila2.in");
ofstream cout("vila2.out");

int main()
{
    cin>>lung>>dist_vec;
    for(int i=1;i<=lung;i++)
        cin>>vila[i];
    
    dist_vec+=1; //sa acopere distanta plus casa de la care pleaca
    for(int i=1;i<=lung;i++)
    {  
        while(st_min<=dr_min && coada_min[st_min]<=i-dist_vec)
            st_min++;
   
        while(dr_min>=st_min && vila[ coada_min[dr_min] ]>vila[i])
            dr_min--;
            
        coada_min[++dr_min]=i;
        
        while(st_max<=dr_max && coada_max[st_max]<=i-dist_vec)
            st_max++;
        
        while(dr_max>=st_max && vila[ coada_max[dr_max] ]<vila[i])
            dr_max--;
            
        coada_max[++dr_max]=i;   
        
        dif_max=max(dif_max,vila[ coada_max[st_max] ]-vila[ coada_min[st_max] ]);
    }
    
    cout<<dif_max;
}