雾粉与贪心
题号:NC274494
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

给三个长度为 n 的正整数数组 cnt, jmp, color,和一个正整数 k 满足 1 \le k \le n,还有一个长度为 q 的修改数组 queries[i] = (op, pos, val)
初始有无限人在位置 0,在位置 0 你可以跳到满足位置 1 \le i \le ki,你的目标是让尽可能多的人跳到位置 n + 1

若一个人在满足位置 1 \le i \le n 的 i,当满足 cnt[i] \gt 0 时,你可以使 cnt[i] 减一, 然后让他跳到满足 i \le j \le i + jmp[i] 的位置 j,但注意如果 1 \le j \le n,那么 color[i] 必须等于 color[j]
你需要按输入顺序执行这 q 个修改,当执行到 queries[i] = (op, pos, val)时:
当 op = C,你需要把 val 赋值到 cnt[pos]
否则当 op = J,你需要把 val 赋值到 jmp[pos]
在每次修改后,输出当前 cnt 和 jmp 所能达到的最大的走到位置  n + 1 的人数,注意修改之间并不互相独立。

输入描述:

第一行两个正整数,表示 n, k
第二行有 n 个正整数,第 i 个正整数表示 cnt[i]
第三行有 n 个正整数,第 i 个正整数表示 jmp[i]
第四行有 n 个正整数,第 i 个正整数表示 color[i]
第五行有一个正整数,表示 q
后面有 q 行,每行一个字符和两个正整数,分别表示 op, pos, val

题目保证对于所有测试用例:

1 \le k, color[i], pos \le n
1 \le n, k, q, cnt[i], jmp[i], color[i], val \le 10^5
op \subseteq {C, J}

输出描述:

输出有 q 行,每行一个非负整数 ans,表示每次查询的答案。
示例1

输入

复制
4 2
2 1 1 1
3 1 2 1
1 2 2 1
4
C 1 2
C 4 2
C 1 1
J 1 1

输出

复制
2
3
2
1