刚刚 CF 的 Div2C
  • 板块学术版
  • 楼主BFSDFS123
  • 当前回复21
  • 已保存回复21
  • 发布时间2022/8/17 00:46
  • 上次更新2023/10/27 15:02:53
查看原帖
刚刚 CF 的 Div2C
358739
BFSDFS123楼主2022/8/17 00:46

寄了 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;
}

2022/8/17 00:46
加载中...