分块算法
多弛豫时间格子波尔兹曼方法的分块算法

M u l t i . b l o c k s c h e me o f M RT l a t t i c e Bo l t z ma n n me t h o d f 0 r v i s c o u s lu f i d l f o w
o Xu e y a n‘ r a n g Fa n 一 ,S h i Xu mi n g。 Gu
m e t h o d( I , B M)f or s o l v i n g a v a r i e t y o f f l u i d d y n a mi c p r o b l e m s .C o m p a r e d w i t h t h e s i n g l e r e l a x a t i o n t i me( S R T )c o l l i s i o n m o d e l , t h e m u l t i p l e r e l a x a t i o n t i m e( MR r r )o n e h a s b e t t e r c o m p u t a t i o n a l s t a b i l i —
—— —— —— —一 J o u r n a l o f Dr a i n a g e a n d I r r i g a t i o n Ma c h i n e r y En g i n e e r
d o 4)
,
,
C h e n T i e j u n ,阢 Y u l i n ,
S ( h o o l f , f En e r g y a l l ( 1 P o we r En g i n e e r i n g . Un i v e r s i t Y o f S h a n g h a i f o r S c i e n c e a n t ]T e t h n o l o g y,S h a n g h a i 2 0 0 0 9 3,Ch i n a:2 S t a t e
分块自适应量化算法的FPGA实现

(n t u eo l to i , h n s a e f c n e 。 ej g 0 0 0 C ia I si t f e r nc C ie eAcd my o i c s B in ,1 0 8 , hn ) t E c s S e i
关 键 词 : 成 孔 径 雷达 ;数 据 压 缩 ;分 块 自适 应 量 化 ; 场 可 编程 门 阵 列 合 现
中图分类号 : TN9 7 5 5.2 文 献标 识 码 : A
I lme t t n o AQ Alo ih Usn P mp e n ai fB g rt m i g F GA o
GA, 用 自顶 向 下 的 方 法 , 采 实现 了3位 长B AQ 压 缩 算 法 。 计 中通 过 资 源 共 享 来 降低 资 源 消耗 , 过 并 行 和 流 水 设 通
来提 高 处理 速度 , 足 了 星 载 系 统 小 型化 、 功 耗 和 高 可 靠性 的要 求 。与 专 用 D P 方 案 相 比 , 用 F G 的 实现 满 低 S 采 P A 方 案 极 大 地 简化 了 电路 设 计 的 复 杂性 和 布 线 的难 度 。
Ab ta t sr c :An i lme t t n me h d f rb o k a a tv u n ia in ( mpe n ai t o o lc d p ie q a tz t o o BAQ )ag rt m sn lo i h u ig
f l r g a i d p o r mm a l a e a r y ( GA ) i p e e t d Th e i n u e h o — o e h d e b e g t r a FP s rsne . e d sg s s t e t p d wn m t o
顺序查找、折半查找和分块查找算法的适用范围

顺序查找、折半查找和分块查找算法的适用范围
1.顺序查找适用范围:
(1)数据量比较小的线性表;
(2)对线性表的操作进行频繁的情况,如链表或数组中删除、插入操作;
(3)线性表中元素无序排列的情况。
2.折半查找适用范围:
(1)线性表有序排列;
(2)查找频繁,但不需要频繁插入和删除操作;
(3)数据量较大,相对于顺序查找来说,提高了查找的速度。
3.分块查找适用范围:
(1)线性表较大,有序排列;
(2)查找频繁,但不需要频繁插入和删除操作;
(3)对于线性表中分布均匀的元素进行查找。
面向增量同步的分块加密算法研究

之所 以使用 E P V 是因为E P V 包含了 O eS L I pn S  ̄ 密库里所有算法的函数 , 这使得我们如果想使 用相 同的代码及不同的加密算法 对数据进行加密和解密 , 只需要 在初 始化参数 的时候做很小 的改变 。由于在初始化密钥 函数 , 也就是将用 户输入 口令转变为标准 AS E 密钥过程 中的标准密钥结构体 ep c h rcxs非常复杂 , v_ i e t t p — 我们就不列举其中包含 的所有成员及其意义了。这里需要指出的是 加解密函数都是 由三部分 函数组成的 : 初始化 、 更新和最终步骤 。以加 密为例 :
Байду номын сангаас
2文件 的分割
这一部分 的内容在 d ie to .的头文件 中, i dme dh v h 其功能是将 目标文件分块 , 参数是 目标文件 的路径 , 而由于我们需要返回多个参
数所以采用一个结构体来包含这些参数 : 最大分块数 m( 整数型 )当前分块数 n 整数型 )断点指针 prs et 。这里有一个 比较 , ( , t(i _型) z 重要的函数 , 是用来得到文件的当前分块数和断点指针 的。 这里我们可以看到其实分割文件就是通过一个函数来对读取 的文档进行一种计算 , 这种计算可以返回一组 叫做 bek on 的 rapit s 数, 这就是断点 了。计算一个 文件的断点所 在位 置的方法 是这样 的 : 首先我们要定义一个 s tt i_ 类型的 ps z o 变量来 遍历 当前 的文件 块 , 对每一个 p s 并 o签名 , 生成一个 un6 _ ( it4t 也就是 us n d og og类 型的变量 s , s 模 以T R E _ H N — IE 也 就是 十 ni e ln ln ) g i将 i g g A G T C U K SZ ,
替代和置乱相结合的图像分块加密算法

F i r s t l y,t h e o ig r i n a l i ma g e i s d i v i d e d i n t o s u b — b l o c ks ,a n d b i t wi s e s u b s t i t u t e o pe r a t i o n i s e x e c u t e d f o r e a c h p i x e l i n i ma g e b l o c k;t he n b y a d o p t i n g u n i f o r m s u b— bl o c k s c r a mb l i n g a l g o it r h m ,e a c h p i x e l i n i ma g e b l o c k i s f u l l y d i f f u s e d t o o t h e r i ma g e b l o c k s ,a n d p i x e l v a l u e i s s c r a mb l e d
李 镉
( 内蒙古化 工职 业学 院计 算机与 信 息工程 系, 内蒙 古 呼 和浩特 0 1 0 0 7 0 )
摘
要 :为增强 数 字图像 的 安全性 , 提 出 了一种基 于 替代 和置乱 的 图像 分 块加 密算 法 。首 先将 原 图 像 分块 , 并 对 每个 图像 块 内像 素
基于NCA的数字图像分块加密算法

( I南) 1 c l - t ( )( 1 g +
针对高分辨率 图像 的安全 问题 ,本文提 出了一种
① 收稿 时 间 : 1.】1: 到修 改稿 时间 : 1_21 2 11.5收 0 2 1.4 0I
其 中 0 X< ,当 Q∈(,。4,B∈【,3时 NC <nl O1 】 54 ] A
摘
要 :提 出了一种基 于改进 的 L g t o ii s c混沌序列 ( A)的彩 色图像 分块加密算法,分别对 图像 的 R、G、B NC
分量进行 了分块置乱 ,摆脱 了 NC A用 于像素加密时对迭代数 的限制,然后通过取迭代值有效数字的方法 生成 异
或序列进行像素置换 。Mal . t b7 a 0仿真结果表 明,该算法具有密钥空 间大 、对初值敏感 以及 良好的实时特 性,能
A s a t lci l rh o g a c l g c pin ae ni rvdL gsc h o q ec( C )s b t c:Abok ga oi m f ii l oo i e n r t sdo o e o i ic as eu n e A i r n g t d t rma e y o b mp t s N
够保证互联 网中保存 的数字 图像 的安全 。 关键词 :N A C ;数字图像加密 ;混沌序列 :分块置乱;像素置换:
A o ki g rt Bl c ngAl o ihm fDi ia m a e En r p i n Ba e n o gt l I g c y to s d o NCA
HA O iG UAN a DU AN e - Le, Hu , Ch n Xu
(h n o g rvn i e a oaoyo Itlgn ulig eh oo y S a dn a zuU iesyJ a 5 1 1C ia S ad n o ic l yL b rtr fne iet i n cn lg, h n o gJ nh nv rt,i n2 0 0, h ) P aK l B d T i i n n
sd放大算法 分块接缝
sd放大算法分块接缝以SD放大算法为标题,我们将介绍分块接缝算法的原理和应用。
一、引言SD放大算法(Seam Carving)是一种图像缩放算法,通过删除或插入最佳路径上的像素来调整图像的尺寸,而不会导致图像内容的失真。
分块接缝(Seam Carving with Blocks)是SD放大算法的一种变体,它将图像分成多个块,并在块之间进行接缝处理,以实现更加平滑的缩放效果。
二、SD放大算法原理1. 能量计算SD放大算法首先通过计算每个像素的能量值来确定最佳路径。
能量值衡量了像素与周围像素的差异,可以用于确定哪些像素应该被删除或插入。
2. 最佳路径选择根据能量值,算法选择一条从上到下或从左到右的最佳路径,该路径上的像素将被删除或插入。
最佳路径选择时,算法考虑到像素的能量以及路径上相邻像素的能量。
3. 路径调整为了保持图像的内容完整,算法会对最佳路径进行调整,以避免删除或插入重要的图像内容。
调整路径时,算法考虑到像素能量和路径上的像素差异。
4. 像素删除或插入算法根据最佳路径删除或插入像素。
删除像素时,算法将路径上的像素删除,并将路径上相邻像素连接起来。
插入像素时,算法将路径上的像素复制,并将其插入到路径中。
三、分块接缝算法原理分块接缝算法在SD放大算法的基础上引入了块的概念,将图像分成多个块,并在块之间进行接缝处理。
1. 块的划分分块接缝算法将图像划分成多个块,每个块包含若干个像素。
划分块的大小可以根据需要进行调整。
较大的块可以保留更多的图像细节,但可能导致图像内容的扭曲。
2. 接缝处理在块之间进行接缝处理时,算法考虑到块的边缘像素和接缝线上相邻像素的能量。
接缝处理可以通过删除或插入像素来调整块的大小,以实现更加平滑的缩放效果。
3. 块的调整为了保持图像的内容完整,算法会对块的大小进行调整。
调整块的大小时,算法考虑到块的能量以及块边缘像素和接缝线上相邻像素的差异。
四、分块接缝算法应用分块接缝算法在图像编辑和图像压缩等领域有着广泛的应用。
图像重建的分块迭代算法
-1-
设 X 为二维物体,或称原像。 p 为测量的或仿真的投影数据,此处假定CT探头宽度足 够大因此投影数据未被截断。 P 为平行光束投影算子或Radon变换[1]。投影数据与投影算子 之间关系为
p= P X
(1)
如果 X 已知,上式可对投影数据进行仿真。若 X 未知,一般 X 可由滤波反投影(FBP)方法 [1]求得
p(1) = P X (0)
(3)
再从投影数据减去重新投影得到两者之差称为投影误差 pd
p d = p − p(1)
(4)
再对投影误差进行图像重建,得到图像的改进量 X d
X d = R pd
(5)
将第一次重建的图像与图像改进量相加便得传统迭代解
X (1) = X (0) + X d
(6)
将上面式(3-6)步骤合并得
一.简介
对平行光束扇形光束和锥形光束的CT(Computer Tomography)系统已经有许多图像重 建算法[1-7]。如果探头宽度足够大,物体全部落在CT 探头的视野之内,测量所得到的投影 数据是完整的。相反如果物体的一部分落在CT 探头的视野之外,测量所得到的投影数据在 探 头 的 边 界 处 被 截 断 。 由 截 断 了 的 投 影 数 据 所 得 的 重 建 图 像 包 含 截 断 膺 像 (Truncation Artifacts) 。 将 局 部 断 层 扫 描 (Local Tomography) 方 法 [8-12] , 图 像 重 建 再 投 影 (Reconstruction and Reprojection)的方法[13-16]和外差(Extrapolation)方法[17-19]相结合, 文献[20]研究了探头的视野受限,投影数据被截断的情况下的图像重建问题,并建立了一个新 颖的迭代算法。该算法将物体分成两部份。一部分为感兴趣的区域,另一部分是感兴趣之 外的区域。感兴趣的区域刚好全部落在探头视野之内,该区域的图像重建是探头视野受限 情况下所关注的。该迭代算法由至少两次图像重建构成。第一次采用FBP方法包括对在探头 之外未知投影数据进行外差。用FBP算法得到感兴趣区域之外部份的图像。将该部分图像再 次投影。将原投影数据与再次投影数据相结合。使用由此所得的投影数据对感兴趣的区域 进行第二次图像重建。该算法对减少截断膺像非常有效。最近发现,其实该算法也对投影 数据未被截断的情况起作用。跟据这一发现,本文将该迭代算法进一步改造,使之更适应 投影数据未被截断的情况。原算法中适用投影数据被截断部份比如外差方法被剔除。原算 法中感兴趣的区域为圆形,改造后成成为方形。原算法中只有一块感兴趣的区域。改造后 图像所在区域被分成许多子区域。这些子区域都是感兴趣的区域。迭代算法被用于每一个 子区域。子区域内的图像最终被拼接成整块图像。由此构成所谓分块迭代算法。与FBP方法 比较,分块迭代算法的抑制膺像作用很显著。但因为其他迭代算法也对膺像有一定抑制作 用。本文还将分块迭代算法与一种传统迭代算法进行了比较。此处提到传统迭代方法是一 种常见的线性方程迭代解法。尽管传统迭代方法对抑制膺像也有贡献,但分块迭代算法的 抑制膺像作用要更上一层。
一种基于分隔条的网页分块算法
一种基于分隔条的网页分块算法孙学波;张大伟【摘要】网络信息时代的到来使得网络中的信息量呈指数增长,由此研究如何从网页中高效地提取出有用信息成为网络信息检索领域中的重要课题.从网页的可视性和统一性两大基本特征出发,提出一种通过检测分隔条对网页进行分块的算法,并使用相对位置排版的概念解决在部分分块的高度未知的情况下如何表示各分块的相对位置的问题.分块过程中,通过已分块数、节点的信息长度、宽高等信息综合确定分块的终止条件,保证了算法的执行效率和有效性.实验结果说明,该算法具有较高的执行效率.【期刊名称】《计算机应用与软件》【年(卷),期】2014(031)007【总页数】5页(P286-289,333)【关键词】Web分块;视觉特征;分隔条;网页分块【作者】孙学波;张大伟【作者单位】辽宁科技大学软件学院辽宁鞍山114051;辽宁科技大学软件学院辽宁鞍山114051【正文语种】中文【中图分类】TP3110 引言世界的信息化已经到来,网络作为信息化的载体势必会充斥着大量的信息,这些信息大多数是我们不关心的,因此对如何高效地从海量的网络信息中提出有用的信息的研究是很有必要的。
众所周知,大多数网络信息是通过网页的形式展现的,网络信息抽取转换成了对这些网页的分析与信息提取。
经研究发现,网页不是一个整体,而是在视觉上分成了若干小块,主题内容就在其中的某些小块中,其它的块则是广告等噪声信息,因此网页分块对主题信息提取有着重要的意义。
大量的研究已经展开。
VIPS[1]算法充分利用了网页的视觉特征对网页进行分块,检测出分块后计算出分隔条,最后基于这些分隔条对文档重构。
这算法是自顶向下遍历节点,也就是说,先对网页进行大的分块,若大的分块不能满足要求则再对其进行更小的分块,因此它是非常高效的。
此算法是利用坐标来进行分隔条检测,从而避免了同一语义块在不同节点的情况。
美中不足的是,此算法要求知道每一个分块的坐标及宽高信息,但在有些情况下高度信息是未知的或是很难计算的,这就不能进行分隔条检测,更不用说语义块重构了。
基于分块关联矩阵的中压配电网可靠性评估分块算法
基 于分 块 关 联 矩 阵 的 中压 配 电 网可 靠 性评 估 分 块 算 法
唐建 宇 ,洪灿 , 姚 钪 ,陈曦
( 深圳供 电局有 限公 司 , 广 东 深 圳 5 1 8 0 2 0 )
摘要 :结合 中压配 电网结构特点 ,提 出基 于分块 关联 矩 阵的 中压 配 电网可靠性评 估分块 算法。首先形 成配 电 网
分块 ,然后提 出了分块 关联矩 阵的构造方 法。基 于此 ,在 以块为 单位进行 故障解析模 拟 时,通过递 归故 障块的
前后 向块 来确定故 障影响 范围,可大量 节省故 障枚 举时 间和重复 的开关元件 搜 索时 间。同时在 分块 关联矩 阵形
成后 可不再考虑 网络结构 ,方便 求得 带子馈线及备 用 电源的配 电网可靠性 指标 。应 用该算 法对可 靠性 测试 系统 进行 了可 靠性评估 ,算例表 明该算 法计算 准确 ,计算过程 简单且便 于分析 系统 中的薄弱点。
第2 6卷 第 1 2期
2 0 1 3年 1 2月
广 东 电 力
GU ANGD0NG E LE CT RI C POW ER
De c . 201 3
d o i :1 0 . 3 9 6 9 / j . i s s n . 1 0 0 7 — 2 9 ( ) x. 2 0 1 3 . 1 2 . 0 0 9
Ab s t r a c t : Co mb i n i n g s t r u c t u r a l c h a r a c t e r i s t i c s o f me d i u m d i s t r i b u t i o n n e t wo r k ,t h i s p a p e r pr o p o s e s b l o c k a l g o r i t h m f o r r e l i a — b i l i t y e v a l u a t i o n o f me d i u m d i s t r i b u t i o n n e t wo r k b a s e d o n b l o c k i n c i d e n c e ma t r i x wh i c h f i r s t l y f o r ms d i s t r i b u t i o n n e t wo r k b l o c k a n d t h e n p r o p o s e s a c o n s t r u c t i o n me t h o d f o r b l o c k i n c i d e n c e ma t r i x Ba s e d o n t h e a b o v e p r i n c i p l e,i t p r o p o s e s t o d e t e r — mi n e t h e f a u l t i mp a c t s c o p e b y f r o n t a n d r e a r b l o c k o f t h e f a u l t b l o c k wh e n c a r r y i n g t hr o u g h f a u l t a n a l y s i s s i mu l a t i o n b y t a k — i n g b l o c k a s u n i t wh i c h i s a b l e t o g r e a t l y s a v e f a u l t e n u me r a t i o n t i me a n d r e p e a t e d s wi t c h i n g e l e me n t s e a r c h i n g t i me . Me a n wh i l e,i t c o n s i d e r s t h a t a f t e r f o r mi n g t h e b l o c k i n c i d e n c e ma t r i x,t h e r e i s n o n e e d t o t h i n k a b o u t n e t wo r k s t r u c — t u r e wh i c h i s mo r e c o n v e n i e n t t o a c q u i r e r e l i a b i l i t y i n d e x o f t h e d i s t r i b u t i o n n e t wo r k p r o v i d e d wi t h s u b f e e d e r s a n d b a c k u p p o we r s o u r c e . I t c o n d u c t s r e l i a b i l i t y e v a l u a t i o n o n r e l i a b i l i t y t e s t i n g s y s t e m b y a p p l y i n g t h i s a l g o r i t h m a n d t h e e x a mp l e i n d i - c a t e s v e r a c i t y o f t h e a l g o r i t h m wh i c h i s p r o v i d e d wi t h s i mp l e c a l c u l a t i o n p r o c e s s f o r e a s y t o a n a l y z e we a k s p o t i n t h e s y s t e m.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
平衡两种针对性不同的算法
• 信息学竞赛有这样一类题目,当题目中的参数比较小时,可以通过某种姿势 暴力,当参数比较大时,又有另一种暴力,这时我们可以通过设置一个阀值 ,然后分两种情况做 • 这一类题目比较灵活多变,我们直接来看一道例题
TC SRM589 Flipping Bits
• 给一个长度为n的01字符串,再给一个正整数M。 • 每次操作可以将一个位置取反,或者将一个长度为M的倍数的前缀取反。问 最少多少次操作,才能使字符串成为一个循环节为M的循环串。
直接分块
• 让我们来看看分块是怎么搞的 • 将连续x个元素分为一个块 • 对于每一个操作[L,R],一定是中间包含了若干完整块,两边剩余不超过2x个位置,即 “[L,K*X],[K*X+1,(K+1)*X]…[K2*Z+1,R]”这种形式 • 对于完整块可以统一处理,如果可以做到O(1),时间复杂度O(n/x) • 对于剩余的2x个点,可以暴力处理O(x) • 当x=sqrt(n)时,每次操作的时间复杂度降到最低O(sqrt(n)) • 若上面两种情况的任意一种需要多一个log的复杂度,那么可以通过调整块的大小来使 得每次操作的复杂度变为O(sqrt(nlogn))
定期重构
• 每sqrt(q)次修改操作,我们就把a数组重新算一遍 • 每次询问考虑剩余的sqrt(q)个修改操作对当前询问的影响 • 总时间复杂度O(nsqrt(q))
莫队算法
• 对于无修改,且如果知道区间[l,r]的答案就可以通过O(1)或者O(logn)的时间算出算出[l,r+1]、[l,r-1] 、[l+1,r]、[l-1,r]的答案的题目,可以套用这一通用解法 • 先将序列分成sqrt(n)分块,然后将所有询问做双关键字排序,第一关键字为询问的左端点所在的块, 第二关键字为询问的右端点 • 那么两个询问[l1,r1],[l1,r2]之间转移的时间为(|l1-l2|+|r1-r2|)*O(移动一步的复杂度),考虑总的端点挪 动次数 • 先将所有询问按照第一关键字分成sqrt(n)类 • 对于左端点,在同一类内的转移,一次不超过sqrt(n),在不同类之间转移不超过sqrt(n)次 • 对于右端点,在同一类内,右端点是单调不降的,所以同一类内最多转移n次,在不同类之间转移 不超过sqrt(n)次 • 那么总转移次数就是nsqrt(n)级别的了
看一道简单的例题
• • • • n个数,q个操作 操作1:将一段区间内每个数增加x 操作2:询问一段区间内数的总和 数据范围:n,q<=100000
直接分块的做法
• 按照前面所说的,将序列每x个分一块 • 修改操作: • 对于完整的块,每个块有一个标记t,表示该块内每个元素的值都需要加上t,相当于 线段树上的lazy标记 • 对于多余的2x个位置,直接暴力修改值 • 询问操作: • 对于完整的块,返回块内元素总和+t*块大小 • 对于多余的2x个位置,直接暴力累加 • 由于两种情况都可以sqrt(n)完成,所以x设为sqrt(n),总时间复杂度O(qsqrt(n))
CodeChef OCT 14 Children Trips
• 有一棵边权为1或2的n个点的树,每次询问从u走到v每天最多走k步,且每天 结束必须在节点上,最少要几天。 • 数据范围:n、询问次数<=100000
Solution
• 对k分情况进行讨论 • k>=sqrt(n) • 最多走sqrt(n)步,每一步二分能走到哪即可 • k<=sqrt(n) • 对于每个k一起处理,倍增,预处理2^i步能走到哪里 • 时间复杂度O(nsqrt(n)logn)
Solution
• 先考虑简化版本:如果询问的是A和B的子串(保证长度相同)? • FFT • 那么原题再把A分块就行了 • 当块的大小为sqrt(nlogn)时时间复杂度最优 • 时间复杂度O(nsqrt(nlogn))
CodeChef JUNE 14 Sereja and Arcs
• 给定一个长度为n的序列A,对于每一对(i,j)(i<j),如果满足Ai=Aj,那么就在 坐标系中画上一个颜色为Ai的以(i,0)(j,0) 为直径的圆。问有多少对颜色不同 的圆存在交点。
Solution
• (2)k>sqrt(n) • 每个点u记录向上走长度i能走到哪(i<=sqrt(n)),记为f[u][i] • 每次走的时候如果剩余长度>sqrt(n)就用f[u][sqrt(n)]更新,剩余长度减去 实际走了多远
• 否则走到f[u][剩余长度] • 因为每步要么走sqrt(n)远,要么走完一次,所以时间复杂度O(sqrt(n))
定期重构
• 对于有修改有询问的题,有一种叫“定期重构”的做法 • 每修改sqrt(m)次,就把需要的信息统一处理一次,那么每次询问时,最多就 sqrt(m)次修改对本次询问的影响还没处理,暴力处理即可 • 还是直接看题感受一下吧
定期重构
• • • • n个数,q个操作 操作1:将一段区间内每个数增加x 操作2:询问一段区间内数的总和 数据范围:n,q<=100000
• 数据范围:n<=300
Solution
• 每m个划分为一段 • 有两种操作,单点翻转和整段翻转,如何平衡这两种操作?
Solution
• 当m比较小时可以直接枚举出答案,那么当单点修改完后,每一段为最后答 案或者每一位都与最后答案相反,剩下的只是整段翻转的事了 • 但并不知道每段变成哪种情况会使得答案最优 • 所以从后往前对每一段dp一下,记录目前翻转次数的奇偶性
Codeforces Round #270 Design Tutorial: Increase the Constraints
• 给出两个01序列A和B,Q次询问,每次询问A的一个子串和B的一个子串异 或之后的结果包含多少个1(两个子串长度相同) • 数据范围:|A|,|B|<=2*10^5,Q<=4*10^5
Solution
• • • • • 若ki>sqrt(n) 可能的颜色最多sqrt(n)种,对每一个颜色判断一下即可 如何做到O(1)回答某种颜色在某一区间内的出现次数? sum1[i][j]表示在前i个块j出现了几次 sum2[i]表示在第i个元素所属的块中在第i个元素之前且与第i个元素颜色相同的位置有多 少个 • 若ki<=sqrt(n) • 对序列进行分块,记录从第i个块到第j个块出现超过k(k<=sqrt(n))次的颜色有几种,对 于多余的2*sqrt(n)个位置的颜色判断一下即可
小z的袜子
• 有n个数,m个询问,每次询问从第l个到第r个数中拿出两个数,这两个数相 等的概率 • 数据范围:n,m<=50000
莫队算法
• • • • • • 其实就是要统计区间内相等的对数 按照前面所说的将询问先排个序,考虑如何转移 开一个数组s,表示目前区间内有s[i]个i 若新增一个数x进区间,答案增加s[x],s[x]+1 删除一个数x,s[x]-1,答案减少s[x] 时间复杂度O(nsqrt(n))
• 那么对于当前段只需数出与答案不相同的个数即可 • 时间复杂度O(2^m*n/m)
Solution
• 当m比较大的时候,发现段数并不怎么多,枚举每一段是否需要翻转 • 对于i,i+m,i+m*2......这些位置,发现它们可以划为一类,因为他们对其他 位置没有影响,其他位置对他们也没有影响,只需要保证每一类里最后都是 一样的就行,所以对于每一类数一下0多还是1多,把少的修改掉即可 • 时间复杂度O(n*2^sqrt(n/m))
CodeChef MAY 15 Chef and Balanced Strings
• 一个字符串如果他的字符都出现了偶数次则称为平衡串。询问一个字符串l~r 内所有平衡子串长度的k次方和。 • 数据范围:字符串长度n,询问次数m<=100000,1<=k<=2
Solution
• 如何快速判断一个子串是否是平衡串? • 把前缀和根据每个字母出现次数的奇偶进行hash,s[r]=s[l-1]即为 平衡串 • 两个相邻的平衡串合并之后仍是平衡串。 • 对于每个i,找到最小的a[i](a[i]>i),使得[i,a[i]]为平衡子串。则 [i,a[i]]、[i,a[a[i]+1]]、[i,a[a[a[i]+1]+1]]…都是平衡串。 • 将这些位置划为一类
Solution
• 分块预处理第i个块到第j个块的答案。每次询问的时候只需考虑添加2*sqrt(n) 个字符后答案的变化。 • 由于只有每一类内的两个位置配对才能组成平衡串,所以考虑每一类内如何 维护 • sigma{(wi-wj)^2}=sigma{wi^2}*(个数-1)-sigma{wi}^2+sigma{wi^2} • 具体的维护方法可以把式子展开,然后维护wi个数,wi总和,wi平方和 • O(nsqrt(n))
• 或者套用莫队算法,维护方法类似
Codeforces Round #221 (Div. 1) Tree and Queries
• 给出一个n个有几种 • 数据范围:n,Q<=10^5
Solution
• 相当于在序列上询问区间中出现次数超过ki的数有几种 • 莫队算法模板题 • 强制在线?
• 数据范围:1<=N,Ai<=100000
Solution
• 相交对数=总数-不相交对数。 • 不相交对数有两种类型:aabb和baab。 • 第一种比较好求,扫一遍就可以求出来。 • 现在来考虑第二种情况。
Solution
• 既然要查询的函数,那么我们把函数也分块 • • • • • • • 维护每个函数块的答案 每次询问时统计完整的被包含的块的和 统计剩余未被考虑的2*sqrt(n)个函数的值 对于每个函数可以通过前i块和、块内前缀和O(1)查询其值。 对于每次修改,需要统计出对每个函数块的影响 这个可以通过预处理每个函数块中包含点i个函数有几个函数轻松解决 时间复杂度O(nsqrt(n))