【题单】海亮

P11696 [JRKSJ ExR] 七影蝶

考虑 \(\mathrm{pop}(a_i+x)\) 什么时候第 \(k\) 位是 1。在 \(\bmod 2^{k+1}\) 意义下,\(x\) 应该是一段区间:\([2^k-a_i,2^{k+1}-1-a_i]\)
那么可以在 \(\bmod 2^{k+1}\) 意义下进行区间加 1,然后到下一位的时候,需要把原本维护的这个数轴复制一份。可以使用主席树维护,复杂度 \(O(n\log^2 V)\)

继续优化。考虑到 \(k+1\) 位的 \([2^{k+1}-a_i,2^{k+2}-1-a_i]\) 和复制的 \([2^k-a_i+2^{k+1},2^{k+1}-1-a_i+2^{k+1}]\)。发现如果这 \(O(n)\) 个区间加把数轴划分成 \(O(n)\) 个段,那么每个段都会被下一位的某个段完全包含。
考虑查询就是算整段和散段。整段计算 rmq,散段可以递归计算。需要 \(O(n)-O(1)\) rmq。

也太菜了,继续优化。每层分段的时候加入 \(q\) 个询问端点,只需要在顶层做 rmq 即可。
实现时要保证复杂度不要退化。

QOJ6509 Not Another Range Query Problem

  • 查询 \([1,r]\):不妨假设每次删掉的都是连续段最左侧的,那么链表模拟删除所有的连续段,做二维数点。

现在区间询问。问题在于你上面那样删可能会导致删到外面的点,所以会错。
不妨考虑 \([1,r]\) 按照删左端点的方式有哪些是不该删除的,发现就是 \([1,l-1]\) 按照右端点删除方式的被删除点数。

P13336 [GCJ 2012 Finals] Shifting Paths

显然有 \(O(2^nn)\) 暴力。发现 \(n\) 较小考虑 meet in middle。
分成两个点集 \(A,B\),预处理从 A 集合的状态 \((S,u)\) 走到 B 集合时 A 集合的状态 \((S',u')\)
不妨从 \(n\) 开始反图 bfs,并取前 \(n/2\) 浅的节点作为 B,其余作为 A。
注意到任何状态只要经过两次一定会到达一次 \(n\)(前提是 \(n\) 可到达)。
那么 B 的部分只要暴力跳,A 的部分查表加速。复杂度 \(O(2^{n/2}n)\)

无解的判定:走的步数太大或者走到重复状态且没有经过 \(n\)

P13695 [CEOI 2025] theseus

WC题

QOJ17186 哈夫曼树 II

\(d=O(\log n+\log V)\),否则没有用,可以直接哈夫曼合并。
\(a\) 从小到大排序,则每层和是 \(a\) 的一个前缀和。
\(f_{i,x}\) 表示合成了 \(i\) 层,现在有 \(x\) 个根,枚举合并 \(2j\) 个根。有 dp:\(f_{i,x}+s_{n-x+2j}\to f_{i+1,x-j}\),答案是 \(f_{d,1}\)
我们规定非叶子的根经过下一层一定要合并,否则一定不优。
反过来变成 \(f_{i,x}+s_{x+2j}\to f_{i+1,x+j}\),答案是 \(f_{d,n-1}\)
可以凸优化,复杂度 \(O(nd)\)

QOJ8820 Exchanging Kubic 2

考虑差分,那么操作 \(x\) 等于找到最近的 \(l,r\),给差分数组减少 1。
考虑所有的 \((l,r,x)\) 三元组,合法条件是包含或相离。
发现只要满足 \(l\le x,r>x\),则一定可以调整为合法。

那么考虑每个差分值,找 \(l,r\) 贪心填进去。
\(f_{i,j,k}\) 表示当前考虑 \(a_i=j\)\(\color{Red}\mathtt{\Gamma}\)

CF2061I Kevin and Nivek

显然有暴力 dp \(f_{i,j}\)
考虑加速 \(f_{l,*}\)\(f_{r,*}\) 的转移,如果 \(|j-(l-j)|\ge r-l\)\(a_i=-1\) 的比赛胜负是确定的,类型 1 可以从小到大选,代价有凸性可以决策单调性加速。
那么还有 \(\le r-l\) 的部分需要转移,可以考虑分治,递归子区间去进行这些转移。
每层转移状态数是关于 \(O(r-l)\) 的,所以总复杂度 \(O(n\log^2 n)\)

CF2061H2 Kevin and Stones (Hard Version)

寻找一些必要条件:

  • \(s,t\) 都是可操作的。
  • 每个连通块内的石子数量都是相同的。
  • 如果连通块是二分图,那么要求在同侧的点操作完后还是在同侧。
  • 如果连通块是二分图,那么可以知道该连通块操作奇偶性,如果存在两个连通块的要求不同,则无解。

我们断言上述条件构成了充要条件。尝试证明:

  • 可操作:拆点二分图,使用网络流求出一个匹配。
    只把我们的匹配边保留,得到一个二分图。接下来都在这个二分图上考虑。
  • 现在图上有一些环和链,考虑环的话 \(s,t\) 的点都是交替出现,那么可以把 \(t\) 的匹配换成 \(s\) 的匹配,这样整个图只有链或者二元环,重边其实也可以看成链。
  • 加入一些剩下的边使得连通,现在得到极大生成森林。

由于 \(s,t\) 都是可操作的,考虑先构造每次只移动一个点的方案,其他点反复横跳。
每次找到最外的匹配边,并找到距离他最近的其不同色的匹配边,加入答案。

考虑每个操作同时进行,只要下一个人比上一个人晚 2 步出发即可。这样构造一定不会超过 \(2n\) 步。

P7783 「MCOI-Zero / AC6-M14」Gracemeria Patrol

如果第一行操作确定了,那么后面的都确定了。
\(f_i\) 表示第 \(i\) 行操作完的状态,\(a_i\) 表示第 \(i\) 行构成的向量。
\(A\) 是一个矩阵,第 \(i\) 行表示操作第 \(i\) 列的变化(\(A_{i,i-1}=A_{i,i}=A_{i,i+1}=1\))。
那么有 \(f_i=f_{i-1}A+ a_i\),所有操作均在 \(\bmod 2\) 意义下进行。
\(((f_1A+a_2)A+a_3)A+\cdots=f_1A^{n}+\sum_{i=2}^{n} a_iA^{n-i+1}=f_n=0\)
\(f_1A^{n-1}=\sum_{i=2}^{n} a_iA^{n-i}\),右侧可以预处理。
如果 \(A\) 存在逆元那么就可以满足条件,否则有多解或无解。

判断 \(A\) 是否满秩:是否存在 \(uA=0\)
也就是 \(\forall i,A_{i-1}+A_{i}+A_{i+1}=0\)
考虑 \(u_1=u_2=0\),则 \(u=0\)
考虑 \(u_1=u_2=1\),则 \(u=[1,1,0,1,1,0,1,1,0,\cdots]\)
\(m\bmod 3=2\) 时有 \(u_{m-1}+u_m=0\),此时 \(A\) 不满秩。其他情况 \(A\) 满秩。

预处理 \(A^{-1}\)\(f_l=(\sum_{i=l+1}^r a_iA^{-i})A^{l}\)

P9105 [PA 2020] Trzy drogi

  • 找出 DFS 生成树,非树边随机赋权,树边权值为跨过他的非树边权值异或和。
  • 合法条件:选出的边异或和是 0。

一些简单的情况:

  • 三条都是割边。
  • 一条是割边两条边权相等。

然后割边可以把两个端点缩成一个。
现在考虑 \(w_i,w_j,w_k\) 都不同的方案。可以把相同的 \(w_i\) 只保留一条,计算其出现次数,其余同权值的边缩起来,树上就没有 \(\le2\) 度点了。
分类讨论:

  • 一条树边,两条非树边:枚举树边,检查是否被恰好两条非树边覆盖。
  • 两条树边,一条非树边:假设有 \(a,b\) 树边,非树边 \(c\),其中 \(c\) 覆盖了 \(a\) 没有覆盖 \(b\)。而其余覆盖 \(a,b\) 的非树边集合相同。那么 \(a,b\) 是祖先后代关系。
    • \(a\) 更深:\(c\) 只能选择上端点最深的那条非树边。
    • \(a\) 更浅:
      • \(a\) 只被两条非树边跨过:两条都有可能。
      • 否则:如果这些非树边下端点都是祖先后代关系,那么只能删除下端点最靠上的那个。
      • 如果不是祖先后代关系,那么删除 \(c\) 后必须是祖先后代关系。
      • 也就是,所有下端点中 dfn 最小/最大的两个可能作为 \(c\)
    • 所以一个 \(a\) 至多有 \(3\) 条候选的 \(c\)(注意去重),那么计算 \(w_a\oplus w_c\) 插入 map,对 \(b\) 做查询即可。
    • 维护上述三条边都可以使用可并堆,弹掉上端点在子树内的边。(懒标记维护删除)
  • 三条树边:那么非树边一定不会割开了。将他们缩掉变成新图,递归子问题。
    缩的轮数只有 \(O(\log m)\),总复杂度 \(O(m\log m)\)

UOJ940 黑桃国王

47e281fa75ca3c4c3e0e4764e7f6d420

posted @ 2026-05-25 08:29  TallBanana  阅读(29)  评论(0)    收藏  举报