日记

日记

Tue Apr 22 2025
4 分钟

大输特输。

Median Splits Link to

如果有 aika_i \le k,就把 aia_i 置为 11,反之置为 1-1。这样,如果一段区间 [l,r][l,r] 的中位数 k\le k 的充要条件就是 i=lrai0\sum_{i = l}^{r}a_i \ge 0。如何使三段区间的中位数的中位数 k\le k 呢?显然是有两个区间的中位数 k\le k 就行。直接大力分讨哪两个区间的中位数 k\le k

  • 左边的和中间的区间
    维护一个前缀和 sumisum_i。如果 sumi0sum_i \ge 0,就看看有没有小于等于 sumisum_i 的非负数出现在 sumsum 里比 ii 靠前的地方 jj。如果有,那么 [1,j],[j+1,i],[i+1,n][1,j],[j + 1,i],[i + 1,n] 就是一组解。直接上权值线段树维护。
  • 右边的和中间的区间
    reverse 一下 aa,然后同上。
  • 左边的和右边的区间
    在上面的两次计算中,记录一个 x,yx,y 分别表示两次计算中 sumisum_i 最早非负的位置。如果 x+y<nx + y < n,就说明两个区间中间还能再夹一个区间,就是可行的。

submission

Local Construction Link to

大力分讨 + 差分约束。

好像神明知道我的码力不行,天天给我发大力分讨题。

Soldier Game Link to

考虑枚举最小值。设 dpl,r,i,jdp_{l,r,i,j} 表示在区间 [l,r][l,r] 中,ll 是否和 l1l - 1 配对,rr 是否和 r+1r + 1 配对的最小的最大值。用线段树维护。转移就是 dpi,j=min{max(dpl,mid,i,k,dpmid+1,r,k,j)}dp_{i,j} = \min\{\max(dp_{l,mid,i,k},dp_{mid + 1,r,k,j})\},表示在诸多 max(dpl,mid,i,k,dpmid+1,r,k,j)\max(dp_{l,mid,i,k},dp_{mid + 1,r,k,j}) 里取最小值。用线段树维护。将每种配对方式的战力从小到大排序。每次记录完答案就把值小于当前值的地方置为 inf\inf

小 A 的卡牌游戏 Link to

考虑只有两种牌怎么做。把牌按照 biaib_i - a_i 排序,然后按照排完序的顺序,先取 BB 个再取 AA 个。想想多加一个怎么做。

我们设 dpi,jdp_{i,j} 表示在前 ii 个 3pick 里取了 jj 个 C。转移是显然的。如果我们不选 c,就按照上面的贪心策略转移:如果 ijBi - j \le B,就取 B,反之取 A。

后日谈 Link to 后日谈

今天中午午觉没睡好。下午听 AC 自动机烧烤过度,还去打了个球。晚上回机房直接获得 debuff:疲惫;效果:智力 inf- \inf,理解能力 inf- \inf,记忆力 inf- \inf。然后晚上硬生生的把 KMP 和 AC 自动机搞懂了。

AC 自动机学习笔记 is coming soon.