Why am i getting TLE in one test case? Other case is working

#include

using namespace std;
#define ll long long int

int pivot(ll n, ll a[],ll k)
{
ll l=0,e=n-1,m,piv;

while(l<=e)
{
    m=(l+e)/2;
    if(m>l && a[m]<a[m-1])
    {
        piv=m-1;
        break;
    }
    if(a[m]>a[m+1] && m<e)
    {
        piv=m;
        break;
    }
    if(a[m]<=a[l])
    {
        e=m-1;
    }
    else
    {
        l=m+1;
    }
}
if(a[piv]==k)
{
    return piv;
}
if(k<a[0])
{
    l=piv+1,e=n-1;
    while(l<=e)
    {
        m=(l+e)/2;
        if(a[m]==k)
        {
            return m;
        }
        else if(a[m]>k)
        {
            e=m-1;
        }
        else if(a[m]<k)
        {
            l=m+1;
        }
    }
}
else
{
    l=0,e=piv-1;
    
    while(l<=e)
    {
        m=(l+e)/2;
        if(a[m]==k)
        {
            return m;
        }
        if(a[m]>k)
        {
            e=m-1;
        }
        else
        {
            l=m+1;
        }
    }
}

return -1;
}

int main() {
ll n,a[1000],k;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
cin>>k;
cout<<pivot(n,a,k);
return 0;
}

The approach you are using in the search function is wrong, Use this kind of approach…
int searchIn(int ar[],int start,int end,int key)
{
if(start>end)
{
return -1;
}
int mid=(start+end)/2;
if(ar[mid]==key)
{
return mid;
}
if(ar[start]<=ar[mid])
{
if(key>=ar[start] && key<=ar[mid])
{
return searchIn(ar,start,mid-1,key);
}
else
{
return searchIn(ar,mid+1,end,key);
}
}
if(key>=ar[mid] && key<=ar[end])
{
return searchIn(ar,mid+1,end,key);
}
else
{
return searchIn(ar,start,mid-1,key);
}
}