#include <iostream>
#include <vector>
using namespace std;
const int MOD = 1e9 + 7;


long long fast_pow(long long x, long long y, long long mod) {
    long long res = 1;
    while (y > 0) {
        if (y & 1) res = res * x % mod;  
        x = x * x % mod;  
        y >>= 1;  
    }
    return res;
}

int main()
{
    int n, q;
    cin >> n >> q;
    long long sum = 0;
    vector<long long>v(n);
    for (int i = 0; i < n; i++)
    {
        cin >> v[i];
        sum = (sum + v[i]) % MOD;
    }
    int l = 0, index;
    while(q--)
    {
        cin >> index;
        index--;

        //可能导致负数
        //sum = sum * 2 % MOD - fast_pow(v[index], 2 * l, 1e9+7);
        sum = (sum * 2 - v[index] * fast_pow(2, l, MOD) % MOD + MOD) % MOD;
        l++;
    }
    cout << sum;

    return 0;
}

0 条评论

目前还没有评论...

信息

ID
100
时间
1000ms
内存
256MiB
难度
7
标签
递交数
438
已通过
88
上传者