专栏文章

题解:CF2064F We Be Summing

CF2064F题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miq4xi8c
此快照首次捕获于
2025/12/03 23:01
3 个月前
此快照最后确认于
2025/12/03 23:01
3 个月前
查看原文

这种题不太需要考虑去重的问题,如果能把所有合法的区间都表示为矩阵,那么就变成了矩阵加、数有多少个点大于 00,可以排序扫描线,用树状数组维护。
那么我们考虑如何把所有合法区间都表示为矩阵加的形式。首先我们可以去找每个子序列 b[l,r]b[l,r] 的左右两个端点 i,ji,j 满足 min(alai)+max(ai+1ar)=k,min(alai1)+max(aiar)k,min(alaj1)+max(ajar)=k,min(alaj)+max(aj+1ar)k\min(a_l\sim a_i)+\max(a_{i+1}\sim a_r)=k,\min(a_l\sim a_{i-1})+\max(a_i\sim a_r)\neq k,\min(a_l\sim a_{j-1})+\max(a_j\sim a_r)=k,\min(a_l\sim a_j)+\max(a_{j+1}\sim a_r)\neq k,然后我们可以去找到所有的 [l,i][l,i],对于它们去找一个区间 [l,r][l',r'] 满足 t[l,r],min(alai)+max(ai+1at)=k\forall t\in[l',r'],\min(a_l\sim a_i)+\max(a_{i+1}\sim a_t)=k,那么矩阵 [l,i][l,r][l,i][l',r'] 就刻画了一堆合法的 bb,关于 jj 的刻画是同理的。关于这个的实现,首先找 [l,i][l,i] 我们可以按照 aa 从大到小加入所有位置,不妨设当前的值为 xx,则我们找到每个 xx 结尾的最长区间使得这个区间的所有元素都 x\ge x,就找到所有 [l,i][l,i] 了。然后 [l,r][l',r'] 可以二分找,check 只需要一个静态的区间最值,用 st 表即可。总时间为 O(nlogn)O(n\log n)

评论

0 条评论,欢迎与作者交流。

正在加载评论...