Pagini recente » Cod sursa (job #2757961) | Cod sursa (job #1427018) | Cod sursa (job #885365) | Cod sursa (job #3288215) | Cod sursa (job #2510736)
#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;
}