LOJ6278 数列分块入门2

这篇博客介绍了如何利用数列分块的方法解决区间加和与小于特定值的数的个数查询问题。文章详细阐述了分块策略,包括分块后的排序、查询和修改操作的实现,并提醒读者在处理最后一块时需要注意其元素数量可能不等于分块长度。
摘要由CSDN通过智能技术生成

LOJ6278 数列分块入门 2


标签

  • 分块入门

前言


简明题意

  • 给一个序列,需要支持两种操作:
    1. 区间加和
    2. 查询区间中小于c的数的个数

思路

  • 分块可以很好的处理这一类题~
  • 首先分块,然后对每一块内排序。可以用一个vector保存每一块的数。
  • 对于查询操作:整块的二分一下,不整块的暴力统计一下。
  • 对于修改操作:整块的可以打标记,不整块的可以直接暴力对原数组修改,然后再把这一块的值重新导入

注意事项

  • 注意最后一块的元素的个数!=len。当处理最后一块时,要特判一下。

总结


AC代码

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;

const int maxn = 5e4 + 10;

int n, a[maxn];
int pos[maxn], len, tag[maxn];
vector<int> b[maxn];

void reset(int id)
{
   
	b[id].clear();
	for (int i = (id - 1) * len + 1; i <= min(id * len, n); i++)
		b[id].push_back
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值