数据结构:分块总结

分块

分块的基本思想是通过适当的划分,预处理一部分信息并保存下来,用空间换取时间,达到时空平衡。事实上,分块的算法更接近“朴素”,效率往往比不上树状数组和线段树,但是它更加通用且容易实现。
下面从题目入手
在这里插入图片描述
这道题的题意非常熟悉,毕竟我们之前拿线段树和树状数组都做过,对于分块算法来说,这道题处理起来要比另两种简单许多。
大致思路如下
首先我们先把这个序列分成 t = s q r t ( n ) t=sqrt(n) t=sqrt(n)个块,然后每一个块的首位分别是w[i]*t-t和w[i]*t.
对于每一个加操作,我们将其分成两步,第一步是对于整块进行加,我们可以开一个sum数组,下标表示第几个块,里面的存的值表示这个区间加的值的大小,然后对于不包括整个块的区间,就暴力的循环加上去.
所以分块算法大致就是秉承着大段维护,局部朴素的思路.
代码如下

#include<bits/stdc++.h>
using namespace std;
const int N=50010;
int n;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值