HNOI2018
d1t1[HNOI/AHOI2018]寻宝游戏 感觉很神,反正我完全没想到 分开考虑每一位,对于每一位i计算一个二进制数b[i], 对于第i位,从后往前第j个数这一位是1,那么b[i]^=(1<<j) 对于操作,从后往前考虑每个数前面的符号,把&看成1,|看成0 把一个操作序列看成一个二进制数c 发现|0和&1等于无影响,一个操作序列的最后一个|1或者&0决定结果的值 那么对于第i位,要使这一位为1,必须满足c<b[i] (这一位是1,则要选择一个b[i]中是1的位置取|,并将它之前的所有操作任意取,之后的操作有唯一取法,相当于将二进制位中某个1变成0,高位不变,低位任意取,最后得到c<b[i]) 那么将b从大到小排序,对于每个询问,首先满足找到最靠左的0必须在1后面,然后最靠左的0的位置为pos,答案为b[pos-1]-b[pos] 要取模,一开始傻乎乎地在那里写高精... 1 // Achen 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdlib> 6 #include<vector> 7 #include<cstdio> 8 #include<queue> 9 #include<cmath> 10 #define For(i,a,b) for(int i=(a);i<