寄了 6 次,人麻了。
求 Hack
// Stand up, all victims of oppression,
// For the tyrants fear your might.
// Dont cling so hard to your possessions,
// For you have nothing, if you have no rights!
#include<bits/stdc++.h>
#define inf 1e18
//#define LL_inf 1145141919810
#define ull unsigned long long
#define ll long long
using namespace std;
#define int long long
const int Maxn=1e5+10;
int Ar[Maxn];
int preMx[Maxn],lstMx[Maxn];
int res[Maxn],Beg[Maxn];
int q[Maxn],cnt;
signed main()
{
int T;
scanf("%lld",&T);
while(T--)
{
int n,Q;
scanf("%lld%lld",&n,&Q);
int pos=0,maxx=-0x3f;
memset(lstMx,-1,sizeof(lstMx));
memset(preMx,0,sizeof(preMx));
memset(res,0,sizeof(res));
memset(Beg,0,sizeof(Beg));
for(int i=1;i<=n;i++)
{
scanf("%lld",&Ar[i]);
if(maxx<Ar[i])
{
preMx[i]=1;
}
maxx=max(maxx,Ar[i]);
}
// cout<<endl;
memset(q,0,sizeof(q));
cnt=1;
q[cnt]=n;
for(int i=n-1;i;i--)
{
while(cnt && Ar[q[cnt]]<=Ar[i])
{
cnt--;
}
if(cnt)
{
lstMx[i]=q[cnt]-i;
}
q[++cnt]=i;
}
for(int i=1;i<=n;i++)
{
if(preMx[i]==1 && lstMx[i]==-1)
{
Beg[i]=max(1ll,i-1);
res[i]=inf;
}else if(preMx[i]==1){
Beg[i]=max(1ll,i-1);
res[i]=lstMx[i];
}else{
Beg[i]=inf;
res[i]=inf;
}
// cout<<preMx[i]<<" "<<lstMx[i]<<endl;
// cout<<Beg[i]<<" "<<res[i]<<endl;
// cout<<"_____"<<endl;
}
while(Q--)
{
int i,k;
scanf("%lld%lld",&i,&k);
if(k<Beg[i]) puts("0");
else{
int Go=k-Beg[i]+1;
printf("%lld\n",min(Go,res[i]));
}
}
}
return 0;
}