时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
给定一个长度为

的序列

,设
)
表示整数

在序列中出现的次数,
)
表示整数

在序列

所有不同的数的
)
中排第
)
名(

从小到大排序,

相同排名相同),其中

为序列中出现的某个数。
现需要对序列进行两种操作:
1.将

修改为

;
2.对于序列

中出现的不同的数

,求
%5C%20xor%5C%20cnt(x))
之和.
例如:
序列

,
%3D3)
,
%3Dcnt(3)%3D2)
,
%3D1)
;
按照

排序则
%3D1)
,
%3Drank(3)%3D2)
,
%3D4)
;
若对该序列进行2操作,则答案为:
%5C%20xor%5C%20cnt(1))%2B(rank(2)%5C%20xor%5C%20cnt(2))%2B(rank(3)%5C%20xor%5C%20cnt(3))%2B(rank(4)%5C%20xor%5C%20cnt(4))%3D(4%5C%20xor%5C%203)%2B(2%5C%20xor%5C%202)%2B(2%5C%20xor%5C%202)%2B(1%5C%20xor%5C%201)%3D7)
.
输入描述:
第一行一个整数
−−−表示序列长度;
第二行n个整数,用空格隔开−−−表示序列
;
第三行一个整数
−−−表示操作的个数;接下来
行,若为"
"
则表示题目中
操作;若为"
"则表示
操作.(输入不包括引号)
输出描述:
对于所有的
操作,输出对应答案,一次操作的输出占一行.
示例1
输入
复制
8
1 1 1 2 2 3 3 4
5
2
1 3 2
2
1 4 4
2
备注:
表示按位异或,参与运算的两个二进制数的对应位中,只要对应的两个二进位不同时,结果位就为
,否则为
。例如在二进制下
