版权声明: https://blog.csdn.net/weixin_39792252/article/details/82415250
题目:有两个操作,一个就是将变为 ,二是求一个区间和的期望,可以看出就是一个区间和就可以啦。
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 998244353;
const int maxn = 1e5+7;
ll qpow(ll a, ll b) {
ll ans = 1ll;
while(b) {
if(b&1) ans = ans*a%mod;
a = a*a%mod;
b>>=1;
}
return ans;
}
ll a[maxn];
int main()
{
int t; scanf("%d", &t);
while(t--) {
ll n, m; scanf("%lld%lld", &n, &m);
ll A, B = qpow(2ll, n*m);
for(int i = 1; i <= n; i++) scanf("%lld", &a[i]);
for(int i = 1; i <= n; i++) a[i] = (a[i]+ a[i-1])%mod;
for(int i = 0; i < m; i++) {
int t, l, r; scanf("%d%d%d", &t, &l, &r);
if(t==1) continue;
else {
A = (a[r] - a[l-1] + mod)%mod;
printf("%lld\n", A*B%mod);
}
}
}
return 0;
}