一直想先AK了再写题解,然后发现这样会一拖再拖,所以即使没做完也先把做了的先贴出来,做出一个再补一个,尽力吧!
A题:问一个最长为100000的序列有多少个不同的 区间“或”值,以当前数结尾的区间的或值最多只有20个,因为任何以当前数结尾的区间都要或上当前这个数,利用或的特性可知最坏情况是当前数为0,才可能有20个数。所以有点dp的思想,由上一个数结尾的所有的区间或值(最多20个) 推到当前数结尾
nlog^2(n)的算法http://codeforces.com/contest/243/submission/2583322
另有一种nlog(n)的做法,很好,思想还是和上面的思想类似,不过更快,因为增加或值的方法是把当前数的二进制数的0变成1,所以可以考虑每个0位,找到这一位最近出现1的位置,这个位置到当前区间的或值就是新增的或值,标记一下即可
http://codeforces.com/contest/243/submission/2584761
B题:分情况讨论,题解已经讲得很详细了http://codeforces.com/blog/entry/5895
代码:http://codeforces.com/contest/243/submission/2636377
C题:gaoing
D题:gaoing
E题:gaoing