CF464E The Classic Problem

题解:

首先要注意到一个数+$2^k$的在二进制中的运算过程是将一段连续都为1的区间都赋0,然后将下一个为0的位置改为1

想到可持久化数组

然后dij一下就好了

有几个值得留下的小东西

1.两个很大的数比较,可以先比较他们[mid+1,r]是否相同,如果相同就比较左区间的大小,如果不同就比较右区间的大小

2.优先队列,例如要以a[x]排序,那么一定<data>里面一定是(x,y)(y=a[x])而不是(x),这样才能正确的进行比较

3.可持久化数据结构回收节点的时候要清空节点

posted @ 2022-08-16 12:09  niolle  阅读(44)  评论(0编辑  收藏  举报