1 17D補好思路

2021-09-10 07:32:34 字數 604 閱讀 1156

思路補充在注釋裡.

#include

#include

#include

using namespace std;

int q[1000],p[1000],num[1000];

int fmin(int a,int b)

q[++e]=i;//實現q[0]=i,不斷賦給新的i值。

while(s<=e&&i-q[s]>=n)//s=0

while(l<=r&&num[i]<=num[p[r]])

//此迴圈不會執行;理由:num[i]會大於num[p[r]]。

p[++r]=i;//故而p[0]=0,即p[i]=i。

while(l<=r&&i-p[l]>=n)//當i>=n-1時讓l進行l++

if(i>=n-1&&fabs(q[s]-p[l])<=n)//由於q[s]相當於i對應當下的值,作用等同於判斷i>=n-1是否滿足;

minn=fmin(minn,fabs(num[q[s]]-num[p[l]]));//求得每n個數最大值與最小值的差,進行比較判斷.

}printf("%d\n",minn);

}return 0;

}思路: