[悬关] MnZn 求调
查看原帖
[悬关] MnZn 求调
371825
SalN楼主2024/1/4 21:03

虽然但是为什么错啊 /ll

#include<bits/stdc++.h>
#define up(i,l,r) for(int i=l; i<=r; ++i)
#define dn(i,r,l) for(int i=r; i>=l; --i)
#define int long long
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)

using namespace std;

const int N=1600010, nul=1, P=998244353;
int n, a[N], tr[N], add[N], mul[N], sum, tot, len[N], sp[N], ds[N];

inline void upd(int p) {
	tr[p]=(tr[ls(p)]+tr[rs(p)])%P;
}

inline void down(int p) {
	if(mul[p]!=nul) {
		tr[ls(p)]=tr[ls(p)]*mul[p]%P, mul[ls(p)]=mul[ls(p)]*mul[p]%P;
		tr[rs(p)]=tr[rs(p)]*mul[p]%P, mul[rs(p)]=mul[rs(p)]*mul[p]%P;
		mul[p]=nul;
	}
	if(add[p]) {
		tr[ls(p)]=(tr[ls(p)]+len[ls(p)]*add[p]%P)%P, add[ls(p)]=(add[ls(p)]+add[p])%P;
		tr[rs(p)]=(tr[rs(p)]+len[rs(p)]*add[p]%P)%P, add[rs(p)]=(add[rs(p)]+add[p])%P;
		add[p]=0;
	}
}

void build(int p,int s,int e) {
	mul[p]=nul;
	if(s==e) { len[p]=(sp[s]-sp[s-1])%P; return; }
	int mid=(s+e)>>1;
	build(ls(p),s,mid), build(rs(p),mid+1,e);
	len[p]=(len[ls(p)]+len[rs(p)])%P;
}

void multi(int p,int s,int e,int l,int r,int val) {
	if(l>r) return;
	if(l<=s&&e<=r) {
		tr[p]=tr[p]*val%P, mul[p]=mul[p]*val%P, add[p]=add[p]*val%P;
		return;
	}
	down(p);
	int mid=(s+e)>>1;
	if(l<=mid) multi(ls(p),s,mid,l,r,val);
	if(r>mid) multi(rs(p),mid+1,e,l,r,val);
	upd(p);
}

void addit(int p,int s,int e,int l,int r,int val) { 
	if(l<=s&&e<=r) {
		tr[p]=(len[p]*val%P+tr[p])%P, add[p]=(add[p]+val)%P;
		return; 
	} 
	down(p);
	int mid=(s+e)>>1;
	if(l<=mid) addit(ls(p),s,mid,l,r,val);
	if(r>mid) addit(rs(p),mid+1,e,l,r,val);
	upd(p);
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	up(i,1,n) cin >> a[i], ds[i]=a[i];
	sort(ds+1,ds+1+n), sum=unique(ds+1,ds+1+n)-(ds+1);
	up(i,1,sum) {
		if(ds[i-1]+1!=ds[i]) sp[++tot]=ds[i]-1; 
		sp[++tot]=ds[i];
	}
	up(i,1,n) a[i]=lower_bound(sp+1,sp+1+tot,a[i])-sp;
	build(1,1,tot), addit(1,1,tot,1,a[1],1); 
	up(i,2,n) {
		sum=tr[1];
		multi(1,1,tot,a[i]+1,tot,0);
		multi(1,1,tot,1,a[i],-1);
		addit(1,1,tot,1,a[i],sum);
	}
	cout << (tr[1]%P+P)%P;
	return 0;
}
2024/1/4 21:03
加载中...