B. Deja Vu

time limit per test

2 seconds

memory limit per test

256 megabytes

You are given an array a of length n, consisting of positive integers, and an array x of length q, also consisting of positive integers.

There are q modification. On the i-th modification (1≤i≤q), for each j (1≤j≤n), such that aj is divisible by 2xi, you add 2xi−1 to aj. Note that xi (1≤xi≤30) is a positive integer not exceeding 30.

After all modification queries, you need to output the final array.

Input

The first line contains a single integer t (1≤t≤104) --- the number of test cases. The description of the test cases follows.

The first line of each test case contains two integers n and q (1≤n,q≤105) ---the length of the array a and the number of queries respectively.

The second line of each test case contains n integers a1,a2,a3,...,an --- the elements of the array a (1≤ai≤109).

The third line of each test case contains q integers x1,x2,x3,...,xq --- the elements of the array x (1≤xi≤30), which are the modification queries.

It is guaranteed that the sum of n and the sum of q across all test cases does not exceed 2⋅105.

Output

For each test case, output the array after all of the modification queries.

Example

Input

Copy

复制代码

4

5 3

1 2 3 4 4

2 3 4

7 3

7 8 12 36 48 6 3

10 4 2

5 4

2 2 2 2 2

1 1 1 1

5 5

1 2 4 8 16

5 2 3 4 1

Output

Copy

复制代码
1 2 3 6 6 
7 10 14 38 58 6 3 
3 3 3 3 3 
1 3 7 11 19 

Note

In the first test case, the first query will add 2 to the integers in positions 4 and 5. After this addition, the array would be 1,2,3,6,6. Other operations will not modify the array.

In the second test case, the first modification query does not change the array. The second modification query will add 8 to the integer in position 5, so that the array would look like this: 7,8,12,36,56,6,3. The third modification query will add 2 to the integers in positions 2,3, 4 and 5. The array would then look like this: 7,10,14,38,58,6,3.

4

4

解题说明:此题是一道模拟题,给定一个数组 arr 和一组指数 t,按照从小到大的顺序,对数组中能被 2^t 整除的元素,加上 2^(t-1)。每个指数最多使用一次,且一旦使用到最小值就停止。对每个指数 t[j],检查数组元素 arr[k] 是否能被 2^t[j] 整除,如果能整除,则加上 2^(t[j]-1)。

cpp 复制代码
#include<stdio.h>
#include<math.h>
int main() 
{
    int test = 0;
    scanf("%d", &test);
    for (int i = 0; i < test; i++)
    {
        int n = 0, x = 0;
        scanf("%d", &n);
        scanf("%d", &x);
        int arr[n];
        int t[x];
        for (int j = 0; j < n; j++) 
        {
            scanf("%d", &arr[j]);
        }
        int min = 0;
        int c = 0;
        for (int j = 0; j < x; j++) 
        {
            scanf("%d", &t[j]);
            if (j == 0) 
            {
                min = t[j];
            }
            if (min > t[j])
            {
                min = t[j];
                c = j;
            }
        }
        int num = t[0];
        for (int j = 0; j < c + 1; j++) 
        {
            if (num >= t[j]) 
            {
                for (int k = 0; k < n; k++) 
                {
                    if (arr[k] % (int)pow(2, t[j]) == 0) 
                    {
                        arr[k] = arr[k] + (int)pow(2, t[j] - 1);
                    }
                }
                if (min == t[j])
                {
                    break;
                }
                num = t[j];
            }
        }
        for (int j = 0; j < n; j++)
        {
            printf("%d ", arr[j]);
        }
        printf("\n");
    }
    return 0;
}
相关推荐
小玮看世界1 小时前
[Python]螺旋遍历 vs 最短路径:方向控制类算法的“同源异流”
开发语言·python·算法
月华路1 小时前
《模型不玄学》第14章 标签、损失与样本权重
人工智能·算法·机器学习
黄金龙PLUS1 小时前
SPARKLE置换算法的优缺点
算法·网络安全·密码学·哈希算法·同态加密
不会就选b1 小时前
算法日常・每日刷题--<贪心>3
数据结构·算法·leetcode
ysu_03141 小时前
03-双链表与循环链表
c语言·数据结构·链表
行者全栈架构师1 小时前
WorkBuddy 实战:把一份 200 页年报变成可上台的投资分析 PPT
人工智能·算法·全栈
微三云生态系统架构师-彭丹1 小时前
矩阵拼团系统设计:先付款先排队的订单排序与自动返本算法
线性代数·算法·矩阵
@MMiL2 小时前
基于Keil 的实时参数标定和值观测
算法
无限码力2 小时前
华为非AI方向笔试真题【工厂落点最小加权路程】
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为最新笔试真题·华为笔试题库