中任意两个数的差值的最大值,m 表示最小差值,要你计算删除K 个数后,M+m的最小值。
一看便知道先排序,那么答案必然是一段连续的区间,直接上单调队列就好
#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include#include #include using namespace std;struct dque{ int v[1000010],p[1000010],m,n,c,h; dque(){ m=n=c=0; h=1; } inline void push(int x){ while(h<=m&&x<=v[m]) m--; v[++m]=x; p[m]=++n; } inline int top(){ return v[h]; } inline void pop(){ if(p[h]==++c) h++; } } q;int n,k,s[1000010],ans=1<<29;int main(){ scanf("%d%d",&n,&k); k=n-k; for(int i=1;i<=n;++i) scanf("%d",s+i); sort(s+1,s+1+n); for(int i=1;i