牛客网暑期ACM多校训练营(第十场)A Rikka with Lowbit [思维]

版权声明: https://blog.csdn.net/weixin_39792252/article/details/82415250

题目:有两个操作,一个就是将A_{i}变为f(A_{i}) ,二是求一个区间和的期望,可以看出就是一个区间和就可以啦。

代码:

#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;
}

猜你喜欢

转载自blog.csdn.net/weixin_39792252/article/details/82415250