简单贪心题.但是我才知道lower_bound找不到就算返回n...第一次学到= - =好累好困,还有一个挺难的dp要学

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+50;
ll pos[N];
int main()
{
    int T;scanf("%d",&T);
    while(T--)
    {
        ll n,m,p;scanf("%lld%lld%lld",&n,&m,&p);
        ll ans=1e18;
        for(int i=1;i<=n;i++)    scanf("%lld",&pos[i]);
        int num=lower_bound(pos+1,pos+1+n,p)-pos-1;
        for(int i=1;i<=num&&i<n;i++)
        {
            ll dis=p-pos[i];        
            ll rem=num-i+1;
            if(rem>m)    continue;
            rem=m-rem;ll dx=0;
            ans=min(ans,dis+(rem)*(pos[i+1]-pos[i])+dx);
            if(rem>0&&num+1<=n)
            {
                rem--,dx=2ll*(pos[num+1]-p);
                ans=min(ans,dis+(rem)*(pos[i+1]-pos[i])+dx);
            }    
        }
        for(int i=num+1;i<n;i++)
        {
            ll dis=pos[i]-p;
            ll rem=i-num;
            if(rem>m)    continue;
            rem=m-rem;ll dx=0;
            ans=min(ans,dis+(rem)*(pos[i+1]-pos[i])+dx);
            if(rem>0&&num>=1)
            {
                rem--,dx=2ll*(p-pos[num]);
                ans=min(ans,dis+(rem)*(pos[i+1]-pos[i])+dx);
            }
        }printf("%lld\n",ans);
    }
    return 0;
}
/*
1
3 10 2
1 10 14
*/