Then again moved row sequence with l, r pointer is moved each time by 1, or by the pointer n nearer
#include<bits/stdc++.h> using namespace std; typedef long long ll; int a[100200]; int main() { int n; ll k; scanf("%d%lld",&n,&k); for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); int minn=a[0],maxx=a[n-1]; int l=0,r=n-1; while(minn!=maxx&&k>0) { ll len1=0,len2=0; while(a[l]==minn) l++; len1=l; while(a[r]==maxx) r--; len2=n-1-r; if(len1<=len2) { ll w=a[l]-minn; if(w*len1<=k) { a = a [i]; k-=w*len1; } else { a = a + k / len1; break ; } } else { ll w=maxx-a[r]; if(w*len2<=k) { maxx=a[r]; k-=w*len2; } else { maxx=maxx-k/len2; break; } } } you q = maxx- from; printf("%d\n",q); return 0; }
ps: This problem also opened himself to do the barrels, and opened the barrel do not know why the practice was wrong in big data. .