错的是#3
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=200005,mod=998244353;
int a[N];
int qpow(int a,int x,int p)
{
if(x==0)return 1;
if(x==1)return a;
int c=qpow(a,x/2,p),y=qpow(a,x%2,p);
return c*y%p*c%p;
}
struct node
{
int sum,mx,quat,mqua,lazy;
}sg[N<<2];
void pushup(int u)
{
sg[u].sum=sg[u<<1].sum+sg[u<<1|1].sum;
sg[u].mx=max(sg[u<<1].sum,sg[u<<1|1].sum);
sg[u].mqua=min(sg[u<<1].mqua,sg[u<<1|1].mqua);
}
void pushlazy(int u,int lz)
{
sg[u].quat+=lz;
sg[u].mqua+=lz;
sg[u].lazy+=lz;
}
void pushdown(int u)
{
if(sg[u].lazy)
{
pushlazy(u<<1,sg[u].lazy);
pushlazy(u<<1|1,sg[u].lazy);
sg[u].lazy=0;
}
}
void build(int u,int l,int r)
{
if(l==r)
{
sg[u].mx=sg[u].sum=a[l];
return;
}
int mid=l+r>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
pushup(u);
}
void update(int u,int l,int r,int L,int R)
{
if(L<=l&&r<=R&&sg[u].mqua)
{
pushlazy(u,-1);
return;
}
if(l==r)
{
if(sg[u].mqua)pushlazy(u,-1);
else
{
sg[u].sum=sqrt(sg[u].sum);
sg[u].mx=sqrt(sg[u].mx);
}
return;
}
pushdown(u);
int mid=l+r>>1;
if(L<=mid&&sg[u<<1].mx>1)update(u<<1,l,mid,L,R);
if(R>mid&&sg[u<<1|1].mx>1)update(u<<1|1,mid+1,r,L,R);
pushup(u);
}
void modify(int u,int l,int r,int L,int R)
{
if(L<=l&&r<=R)
{
pushlazy(u,1);
return;
}
pushdown(u);
int mid=l+r>>1;
if(L<=mid)modify(u<<1,l,mid,L,R);
if(R>mid)modify(u<<1|1,mid+1,r,L,R);
pushup(u);
}
int query(int u,int l,int r,int i)
{
if(l==r)return qpow(sg[u].sum,qpow(2,sg[u].quat,mod-1),mod);
pushdown(u);
int mid=l+r>>1;
if(i<=mid)return query(u<<1,l,mid,i);
return query(u<<1|1,mid+1,r,i);
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n,m,ans=0;
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,1,n);
while(m--)
{
int op,l,r;
cin>>op>>l>>r;
if(op==1)update(1,1,n,l,r);
if(op==2)modify(1,1,n,l,r);
}
for(int i=1;i<=n;i++)(ans+=query(1,1,n,i))%=mod;
cout<<ans;
}