+ Analog two-hand --cf1244E

 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. .

Guess you like

Origin www.cnblogs.com/zsben991126/p/11717643.html