wa16pts求调
查看原帖
wa16pts求调
252549
Iwara楼主2024/4/6 14:43

RT

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAXN=5e5+5,MOD=998244353;
ll _,n;
ll a[MAXN];
ll mul2[MAXN];
struct sgm_t{
	ll pre[MAXN<<2],suf[MAXN<<2],now_pre,now_suf,now_len;
	void clear(){
		memset(pre,0,sizeof(pre));
		memset(suf,0,sizeof(suf));
		return;
	}
	void push_up(ll id,ll L,ll R){
		ll mid=(L+R>>1);
		pre[id]=(pre[id<<1]+pre[id<<1|1]*mul2[mid-L+1]%MOD)%MOD;
		suf[id]=(suf[id<<1|1]+suf[id<<1]*mul2[R-mid]%MOD)%MOD;
		return;
	}
	void update(ll id,ll L,ll R,ll pos){
		if(pos<L||pos>R)return;
		if(L==R){
			pre[id]=1;
			suf[id]=1;
			return;
		}
		ll mid=(L+R)>>1;
		if(pos<=mid)update(id<<1,L,mid,pos);
		else update(id<<1|1,mid+1,R,pos);
		push_up(id,L,R);
		return;
	}
	void query_pre(ll id,ll L,ll R,ll QL,ll QR){
		if(L>R||QR<L||R<QL)return;
		if(QL<=L&&R<=QR){
			now_pre+=pre[id]*mul2[now_len]%MOD;
			now_pre%=MOD;
			now_len+=(R-L+1);
			return;
		}
		ll mid=(L+R)>>1;
		if(QL<=mid)query_pre(id<<1,L,mid,QL,QR);
		if(QR>mid)query_pre(id<<1|1,mid+1,R,QL,QR);
		return;
	} 
	void query_suf(ll id,ll L,ll R,ll QL,ll QR){
		if(L>R||QR<L||R<QL)return;
		if(QL<=L&&R<=QR){
			now_suf+=suf[id]*mul2[now_len]%MOD;
			now_suf%=MOD;
			now_len+=(R-L+1);
			return;
		}
		ll mid=(L+R)>>1;
		if(QR>mid)query_pre(id<<1|1,mid+1,R,QL,QR);
		if(QL<=mid)query_pre(id<<1,L,mid,QL,QR);
		return;
	} 
}S;
ll _l,_r;
string ans;
int main(){
	mul2[0]=1;
	for(int i=1;i<=5e5;i++)mul2[i]=mul2[i-1]*2%MOD;
	cin>>_;
	while(_--){
		cin>>n;
		for(int i=1;i<=n;i++)cin>>a[i];
		S.clear();
		ans="N";
		for(int i=1;i<=n;i++){
			S.update(1,1,n,a[i]);
			if(a[i]<n-a[i]+1)_l=1,_r=a[i]*2-1;
			else _r=n,_l=a[i]*2-n;
			S.now_pre=S.now_suf=0;
			S.now_len=0;S.query_pre(1,1,n,_l,a[i]);
			S.now_len=0;S.query_suf(1,1,n,a[i],_r);
			if(S.now_pre!=S.now_suf)ans="Y"; 
		}
		cout<<ans<<'\n';
	}
	return 0;
}
2024/4/6 14:43
加载中...