CF1630D.Flipping Range
提高+/省选-
通过率:0%
时间限制:2.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You are given an array a of n integers and a set B of m positive integers such that 1≤bi≤⌊2n⌋ for 1≤i≤m, where bi is the i-th element of B.
You can make the following operation on a:
- Select some x such that x appears in B.
- Select an interval from array a of size x and multiply by −1 every element in the interval. Formally, select l and r such that 1≤l≤r≤n and r−l+1=x, then assign ai:=−ai for every i such that l≤i≤r.
Consider the following example, let a=[0,6,−2,1,−4,5] and B=1,2:
- [0,6,−2,−1,4,5] is obtained after choosing size 2 and l=4, r=5.
- [0,6,2,−1,4,5] is obtained after choosing size 1 and l=3, r=3.
Find the maximum i=1∑nai you can get after applying such operation any number of times (possibly zero).
给你一个包含 n 个整数的数组 a,以及一个包含 m 个正整数的集合 B,满足对所有 1≤i≤m,有 1≤bi≤⌊2n⌋,其中 bi 表示集合 B 中的第 i 个元素。
你可以在数组 a 上执行如下操作:
- 选择某个 x,使得 x 属于集合 B;
- 在数组 a 中选取一个长度为 x 的连续子区间,并将该区间内每个元素乘以 −1。形式化地说,选择下标 l 和 r,满足 1≤l≤r≤n 且 r−l+1=x,然后对所有满足 l≤i≤r 的 i,令 ai:=−ai。
考虑如下示例:设 a=[0,6,−2,1,−4,5],B={1,2}:
- 若选择长度 x=2,并取 l=4、r=5,则得到 [0,6,−2,−1,4,5];
- 若选择长度 x=1,并取 l=3、r=3,则得到 [0,6,2,−1,4,5]。
求在执行上述操作任意次数(包括零次)后,所能达到的最大值 i=1∑nai。
输入格式
The input consists of multiple test cases. The first line contains a single integer t (1≤t≤105) — the number of test cases. Description of the test cases follows.
The first line of each test case contains two integers n and m (2≤n≤106, 1≤m≤⌊2n⌋) — the number of elements of a and B respectively.
The second line of each test case contains n integers a1,a2,…,an (−109≤ai≤109).
The third line of each test case contains m distinct positive integers b1,b2,…,bm (1≤bi≤⌊2n⌋) — the elements in the set B.
It's guaranteed that the sum of n over all test cases does not exceed 106.
输入包含多个测试用例。第一行包含一个整数 t(1≤t≤105),表示测试用例的数量。随后是各测试用例的描述。
每个测试用例的第一行包含两个整数 n 和 m(2≤n≤106,1≤m≤⌊2n⌋),分别表示数组 a 和集合 B 的元素个数。
每个测试用例的第二行包含 n 个整数 a1,a2,…,an(−109≤ai≤109)。
每个测试用例的第三行包含 m 个互不相同的正整数 b1,b2,…,bm(1≤bi≤⌊2n⌋),即集合 B 中的元素。
保证所有测试用例的 n 值之和不超过 106。
输出格式
For each test case print a single integer — the maximum possible sum of all ai after applying such operation any number of times.
对于每个测试用例,输出一个整数——在任意次数执行该操作后,所有 ai 的和的最大可能值。
输入输出样例
输入#1
3 6 2 0 6 -2 1 -4 5 1 2 7 1 1 -1 1 -1 1 -1 1 2 5 1 -1000000000 -1000000000 -1000000000 -1000000000 -1000000000 1
输出#1
18 5 5000000000
说明/提示
In the first test, you can apply the operation x=1, l=3, r=3, and the operation x=1, l=5, r=5, then the array becomes [0,6,2,1,4,5].
In the second test, you can apply the operation x=2, l=2, r=3, and the array becomes [1,1,−1,−1,1,−1,1], then apply the operation x=2, l=3, r=4, and the array becomes [1,1,1,1,1,−1,1]. There is no way to achieve a sum bigger than 5.
在第一个测试用例中,你可以执行操作 x=1、l=3、r=3,以及操作 x=1、l=5、r=5,此时数组变为 [0,6,2,1,4,5]。
在第二个测试用例中,你可以先执行操作 x=2、l=2、r=3,此时数组变为 [1,1,−1,−1,1,−1,1];再执行操作 x=2、l=3、r=4,此时数组变为 [1,1,1,1,1,−1,1]。不存在使数组元素和大于 5 的方法。
输入解题思路,AI测评打分。不知道怎么写?