本题需要判断每个位置 i 是否存在某个 j>i 使得 ai⊕aj≥M,其中 M 是序列的最大值。这是一个典型的“对每个元素查询其后缀中与其异或能得到的最大值”问题,可以使用**二进制字典树(Trie)**高效解决。
核心思路分为以下步骤:
给定一个长度为 n 的正整数序列 a1,a2,…,an。记 M 为整个序列中的最大值,称为基准值。
对于每一个位置 i,如果存在某个 j>i,使得 ai⊕aj≥M(⊕ 表示按位异或),则称位置 i 是优质位置。
请判断序列中每个位置是否为优质位置。
约束条件:序列长度 n 满足 1≤n≤200000,所有整数满足 1≤ai≤109。
输入共两行。 第一行包含一个整数 n(1≤n≤200000),表示序列长度。 第二行包含 n 个整数 a1,a2,…,an(1≤ai≤109),表示序列中的元素。
输出一行一个长度为 n 的字符串,仅由字符 0 和 1 组成。如果位置 i 是优质位置,则第 i 个字符为 1,否则为 0。
输入
1
100
输出
0
说明
序列仅有一个元素 a1=100,最大值 M=100。对于位置 1,不存在 j>1,因此不满足优质位置的条件,输出 0。
输入
3
1 2 3
输出
100
说明
最大值 M=3。
3(a3=3)右侧无元素,不是优质位置,记为 0。2(a2=2)右侧仅有 a3=3,2⊕3=1<M,不满足条件,记为 0。1(a1=1)右侧有 a2=2 和 a3=3,其中 1⊕2=3≥M,满足条件,记为 1。
因此最终输出 100。输入
3
5 1 5
输出
000
说明
最大值 M=5。
3 右侧无元素,为 0。2 右侧有 a3=5,1⊕5=4<M,为 0。1 右侧有 1 和 5,5⊕1=4,5⊕5=0,均小于 M,为 0。
最终输出 000。输入
5
8 1 2 4 8
输出
11110
说明
最大值 M=8。
5 为最后一个,记为 0。4(a4=4)右侧有 a5=8,4⊕8=12≥M,记为 1。3(a3=2)右侧有 4 和 8,2⊕8=10≥M,记为 1。2(a2=1)右侧有 2,4,8,1⊕8=9≥M,记为 1。1(a1=8)右侧有 1,2,4,8,8⊕4=12≥M,记为 1。
最终输出 11110。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.