首页 > 其他分享 >CF232D Fence

CF232D Fence

时间:2023-11-14 11:56:19浏览次数:32  
标签:Fence 后缀 text CF232D boldsymbol 差分 数组 2n

好喜欢 SA + DS。

洛谷 CF

  • 给出序列 \(a_1\sim a_n\),有 \(q\) 次询问,每次询问给出 \([l,r]\),求有多少个区间 \([x,y]\) 满足 \(y-x=r-l\),\([x,y] \bigcap \,[l,r]=\varnothing\) 且 \(\forall \,i\in[0,r-l],a_{l+i}+a_{x+i}=a_{l}+a_x\)。

  • \(n,q\le 10^5\)。

tags:

  • \(\text{binary search}\)

  • \(\text{data structures}\)

  • \(\text{string suffix structures}\)

  • \(\color{red}*2900\)

这题看着一点都不串串,但是它就是串串。

原题就是让我们求出有多少个满足条件的左端点。

我们记原数组的差分数组 \(d_i=a_i-a_{i-1}\,(i\in(1,n])\)。认为 \(\boldsymbol{d_1}\) 没有意义,即不存在,其值不与任何一个 \(\boldsymbol{d_i}\) 相同。则满足第二个条件的充要条件是 \(\forall \,i\in(0,r-l],d_{l+i}=-d_{x+i}\)。

  • 证明:

根据已知条件可以推出:

  • \(a_{l+i}+a_{x+i}=a_l+a_x\Leftrightarrow a_{l+i}-a_l=a_x-a_{x+i}\)

  • \(a_{l+i-1}+a_{x+i-1}=a_l+a_x\Leftrightarrow a_{l+i-1}-a_l=a_{x}-a_{x+i-1}\)

两式相减即可得到 \(a_{l+i}-a_{l+i-1}=a_{x+i-1}-a_{x+i}\),即 \(d_{l+i}=-d_{x+i}\)。

我们若倍长 \(d\),且令 \(d_i=-d_{i-n}\,(i\in(n,2n])\),则上述条件等价于 \(d_{l+i}=d_{x+n+i}\)。我们要统计有多少个 \(x\),就可以去统计有多少个 \(x+n\),同理可以去统计有多少个 \(\boldsymbol{x+n+1}\)

为什么要做这一步转化呢?我们发现,对于 \(d[l+1,2n]\) 和 \(d[x+n+1,2n]\) 这两个后缀,它们存在 \(\boldsymbol{d[l+1,r]}\) 和 \(\boldsymbol{d[x+n+1,x+n+r-l]}\) 这一段长度为 \(\boldsymbol{r-l}\) 的公共前缀。考虑对差分数组进行后缀排序,则可以二分 + ST 表求出与后缀 \(d[l+1,2n]\) 的 \(\text{LCP}\) 长度不小于 \(r-l\) 的排名区间。然后根据不交、长度相等的限制以及差分数组的定义,可以得到 \(x+n+1\) 的范围是 \([n+2,n+2l-r]\bigcup\, [n+r+2,2n+l-r+1]\)。

这就是个二维数点,在线主席树或离线扫描线 + 树状数组维护一下就行了。

  • 注意

使用上述统计方法的前提是存在差分数组。当 \(l=r\) 时,区间内不存在差分数组,不能这样统计。

不过容易得知此时答案即为 \(n-1\),特判一下即可。

代码里用的是主席树,时间、空间复杂度均为 \(\mathcal{O}(n\log n)\)。

提交记录(\(\color{limegreen} \bf{Accepted}\) \(\boldsymbol{483\,\text{ms}\,/\,73952\,\text{KB}}\),含代码)

标签:Fence,后缀,text,CF232D,boldsymbol,差分,数组,2n
From: https://www.cnblogs.com/MnZnOIerLzy/p/17831284.html

相关文章

  • 关于pacemaker集群stonith:fence_azure_arm资源-SP-服务主机-密码过期的处理方法
    在pacemaker中,一般都会创建一个stonith资源(ShootTheOtherNodeInTheHead),笔者因为是在Azure平台、于是使用的为 stonith:fence_azure_arm最近发现有一个与之关联的服务主体的密码过期了,导致状态异常,通过pcsstatus可以看到FailresourceActions信息FailedResourceAc......
  • AT_abc325_g offence 题解
    AT_abc325_goffence题解一道不难但是需要想一想的区间DP。有一个比较复杂的例子:ooofofxxx,简单的分析可知,一个of后面删除多少,与其前、后都有关,于是考虑区间DP。想到这里,其实问题已经解决一半了。状态设计设\(f(l,r)\)为闭区间\([l,r]\)经过操作之后的最小长度。注......
  • Fence & FencedFrameConfig All In One
    Fence&FencedFrameConfigAllInOneFencedFrameDraftCommunityGroupReport,23October2023Thefencedframeenforcesaboundarybetweentheembeddingpageandthecross-siteembeddeddocumentsuchthatuserdatavisibletothetwositesisnot......
  • 【POJ 3253】Fence Repair 题解(贪心算法+优先队列+哈夫曼树)
    农夫约翰想修理牧场周围的一小段围栏。他测量了围栏,发现他需要N(1≤N≤20000)块木板,每块木板都有一定的整数长度Li(1≤Li≤50000)单位。然后,他购买了一块长度刚好足以锯入N块木板的长木板(即,其长度为Li长度的总和)。FJ忽略了“切口”,即锯切时锯屑损失的额外长度;你也应该忽略它。FJ伤心地......
  • Systrace看GPU渲染花费时间之Fence
    一、前言如上图所示的Systrace中,VSYNC-app基本上没有什么变化,但是VSYNC-sf却一直在更新有可能是什么原因?VSYNC-app的作用通知app去开始进行绘制渲染更新UI了,DispSync按照屏幕的刷新率的速率去通知app,因此app会以跟屏幕刷新率匹配的速率去绘制渲染更新UI。而在手......
  • Electric Fence
    描述Inthisproblem,"latticepoints"intheplanearepointswithintegercoordinates.Inordertocontainhiscows,FarmerJohnconstructsatriangularelectricfencebystringinga"hot"wirefromtheorigin(0,0)toalatticepoint......
  • pacemaker使用fence_sbd
    AdministrativeProceduresforRHELHighAvailabilityclusters-EnablingsbdfencinginRHEL7and8-RedHatCustomerPortal启动watchdog每个server执行modprobesoftdogmodprobesoftdogcat/etc/sysconfig/modules/softdog.modulesmodprobesoftdogchmod7......
  • Painting the Fence 题解
    题目传送门一道枚举题。我们可以直接枚举那\(2\)个去掉的粉刷匠。先统计一下每个栅栏会被多少个粉刷匠刷到,然后枚举第一个被去掉的粉刷匠,然后计算剩下的粉刷匠会将每个栅栏刷到多少次,我们只需要看只能被刷\(1\)次的栅栏就行了。接着处理一个前缀和数组,记录前\(i\)个栅栏......
  • Linux mem 2.8 Kfence 详解【转】
    转自:https://pwl999.blog.csdn.net/article/details/1244949581.原理介绍Kfence(KernelElectricFence)是Linux内核引入的一种低开销的内存错误检测机制,因为是低开销的所以它可以在运行的生产环境中开启,同样由于是低开销所以它的功能相比较KASAN会偏弱。Kfence的基本原......
  • Best Cow Fences(前缀和+特殊二分)
    之前的二分大多数都是整数类型的,今天又学到一种新型的二分,浮点数的二分,浮点数的二分可太巧妙了.且听我细细分说::OpenJudge-2018:BestCowFences#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;intn,k;doublea[N],s[N],l,r;boolcheck(doubleu)......