博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分块学习笔记
阅读量:6131 次
发布时间:2019-06-21

本文共 871 字,大约阅读时间需要 2 分钟。

笔记——分块

1. 时间复杂度:O(n*sqrt(n))
2. 基本思想:分成sqrt(n)块,对每个区间进行朴素操作
【例1】A Simple Problem with Integers (POJ3468)
每一块上记录sum(区间和),标记add,左右端点[第i块的左端点为(i-1)×sqrt(n)+1, 右端点为i×sqrt(n)]。
标记当前元素属于哪一块,pos[i]=j表示原序列第i个元素在第j块中。
Change操作:把数列中l~r的每个数都加d
    <1>如果l和r在同一块内,则直接暴力把l~r的每个数加d,同时更改这一块的sum值。
    <2>设l在第p块内,r在第q块内。对于中间完整的每一块,更改标记add+=d;对于不完整的第p和第q块,同<1>暴力修改。
   
Question操作:查询l~r的区间和
    <1>如果l和r在同一块内,则直接把l~r的每个数加起来,记得修改标记。
        
    <2>如果l在第p块内,r在第q块内。对于中间完整的每一块,直接把sum相加,同时还要加上标记;对于不完整的第p和第q块,同<1>暴力相加。
   
【例2】磁力块 (CH#46A)
   
   磁石吸引条件包含两个维度,即质量<=磁力,距离<=吸引半径。
   
  建立一个队列,最初仅包含磁石L,每次从队头取出磁石,把所有能被吸引的磁石加入队尾。
   
   把N块磁石按照质量从小到大排序,分成sqrt(n)块,然后在每块内部,再按照距离从小到大排序。
   
   每次用队头磁石(设为H)吸引其他磁石时,根据排序的结果,一定存在一个整数k,满足:
   
     <1>第1~k-1块中的磁石质量都不大于H的磁力。
        
     <2>第k+1块之后的磁石质量都大于H的磁力,不可能被吸引。
   
   因为每一块内部已经按照距离从小到大排序,所以第1~k-1块中与初始点距离小于H吸引半径的磁石必定在这一块的开头部分。
   
   找到当前这一块第一个不能被吸引的磁石,把该块的开头移到此处,以免已经被吸引的磁石被重复扫描。

转载于:https://www.cnblogs.com/THWZF/p/10301059.html

你可能感兴趣的文章
解决ros建***能登录不能访问内网远程桌面的问题
查看>>
pfsense锁住自己
查看>>
vsftpd 相关总结
查看>>
bash complete -C command
查看>>
解决zabbix 3.0中1151端口不能运行问题
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
dubbo
查看>>
【Git入门之四】操作项目
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
高利率时代的结局,任重道远,前途叵测
查看>>
phpcms v9栏目列表调用每一篇文章内容方法
查看>>
python 自定义信号处理器
查看>>
luov之SMTP报错详解
查看>>
软件概要设计做什么,怎么做
查看>>
dwr
查看>>
java的特殊符号
查看>>
word2010中去掉红色波浪线的方法
查看>>