求分析时间复杂度
查看原帖
求分析时间复杂度
252567
Or1gam1楼主2024/1/23 09:39

瞎写的过了

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5,mod=998244353;
int w1[N<<2],w2[N<<2],w3[N<<2],lzy[N<<2],a[N],n,m;
void pushup(int u){
	w1[u]=min(w1[u<<1],w1[u<<1|1]);
	w2[u]=max(w2[u<<1],w2[u<<1|1]);
	w3[u]=max(w3[u<<1],w3[u<<1|1]);
}
void build(int u,int l,int r){
	if(l==r) w3[u]=a[l];
	else{
		int mid=l+r>>1;
		build(u<<1,l,mid);
		build(u<<1|1,mid+1,r);
		pushup(u);
	}
}
void mkt(int u,int x){
	w1[u]+=x,w2[u]+=x,lzy[u]+=x;
}
void psd(int u){
	if(!lzy[u]) return;
	mkt(u<<1,lzy[u]);
	mkt(u<<1|1,lzy[u]);
	lzy[u]=0;
}
void upd(int u,int l1,int r1,int l2,int r2){
	if(l2<=l1&&r1<=r2){
		if(w1[u]){
			mkt(u,-1);
			return;
		}
		else{
			if(!w2[u]){
				if(w3[u]<=1) return;
				else{
					if(l1==r1){
						w3[u]=sqrt(w3[u]);
						return;
					}
				}
			}
		}
	}
	psd(u);
	int mid=l1+r1>>1;
	if(l2<=mid) upd(u<<1,l1,mid,l2,r2);
	if(r2>mid) upd(u<<1|1,mid+1,r1,l2,r2);
	pushup(u);
}
void upd1(int u,int l1,int r1,int l2,int r2){
	if(l2<=l1&&r1<=r2) mkt(u,1);
	else{
		psd(u);
		int mid=l1+r1>>1;
		if(l2<=mid) upd1(u<<1,l1,mid,l2,r2);
		if(r2>mid) upd1(u<<1|1,mid+1,r1,l2,r2);
		pushup(u);
	}
}
int qry1(int u,int l,int r,int q){
	if(l==r) return w3[u];
	else{
		psd(u);
		int mid=l+r>>1;
		if(q<=mid) return qry1(u<<1,l,mid,q);
		else return qry1(u<<1|1,mid+1,r,q);
	}
}
int qry2(int u,int l,int r,int q){
	if(l==r) return w1[u];
	else{
		psd(u);
		int mid=l+r>>1;
		if(q<=mid) return qry2(u<<1,l,mid,q);
		else return qry2(u<<1|1,mid+1,r,q);
	}
}
int ksm(int a,int b,int p){
	int res=1;
	while(b){
		if(b&1) res*=a,res%=p;
		a*=a,a%=p;
		b>>=1;
	}
	return res;
}
signed main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
	build(1,1,n);
	for(int i=1,op,l,r;i<=m;i++){
		scanf("%lld%lld%lld",&op,&l,&r);
		if(op&1) upd(1,1,n,l,r);
		else upd1(1,1,n,l,r);
	}
	int ans=0;
	for(int i=1;i<=n;i++) ans+=ksm(qry1(1,1,n,i),ksm(2,qry2(1,1,n,i),mod-1),mod),ans%=mod;
	printf("%lld\n",ans);
	return 0;
}
2024/1/23 09:39
加载中...