分块大法

2023-11-05

所谓分块,就是将原序列处理成各个小块,目的是尽量地达到处理和询问之间的平衡对于分块类问题,常常可以提取出“在给定区间内进行操作,或询问区间内满足给定条件的元素等”。接下来,例题。

首先是男神hzwer的博客链接 hzwer
因为下述题目皆由此改变。

问题 A: 小Z的课堂检测
时间限制: 1 Sec
内存限制: 128 MB
题目描述
大家都知道小Z的课总是十分快的(鬼知道为什么),然后我们阿M同学总是在上课时处于神游状态亦或是休眠状态,所以她对小Z到底讲了什么是一无所知。然而,小Z总是很坏地打断阿M的休眠状态,并问她问题。作为阿M的开黑好伙伴,你当然不希望阿M同学翻车(不然下一个回答问题的人就是你啦)。所以你需要编写个程序帮助阿M求小Z对于知识点到底讲的档次有多深。已知小Z在课上总会扯到涉及到N个知识点,小Z会进行M个动作(讲课或是提问阿M)。由于小Z比较古灵精怪,所以小Z的讲课时只会讲连续的知识点,并且对于这段区间内的知识点都提升一样的档次。而且,小Z也比较懒,所以小Z只会问阿M关于某一个知识点的了解程度。
输入
第一行读入N,表示小Z要涉及到N个知识点
第二行读入A[1],A[2]……A[N-1],A[N]表示小Z上几节课已经把第i个知识点的 难度提升到A[i]的难度
第三行读入M,表示小Z要进行M个动作
接下来M行,读入Choice
若Choice=1,则表示小Z要讲课啦
接下来读入L,R,X 表示小Z要对L到R这些连续的知识点提升难度X
若Choice=2,则表示小Z要提问啦
接下来读入K,表示小Z问阿M第K个知识点他已经讲到哪个难度了
输出
每行输出一个数表示阿M应该回答的正确答案
样例输入
10
1 2 3 4 5 6 7 8 9 10
5
1 2 3 4
2 3
1 3 4 5
2 5
1 5 8 5

7
5 3 7 7 5 8 5
9
1 2 7 -1
2 1
2 2
1 2 3 1
1 2 7 2
2 2
1 3 3 -1
2 3
2 1
样例输出
7
5

5
2
5
8
5
数据范围
对于50%的数据,N<=1000,M<=1000
对于100%的数据,N<=100000,M<=100000 |X|<=50000
|A[i]|<=50000;

简单思路:
首先是最暴力的思路,对于每次修改暴力for一遍,我们不难发现,这样做,并不是所有的修改在后面的过程中都会被询问到,所以我们考虑分块。
我们假设序列长n,每块大小为m,所以共有n/m个块。
对于每段修改[l,r],同样分块后,最多处理得到n/m个完整的块,和左右两段不完整的块,图示如下:这里写图片描述
所以每次修改的时间复杂度为O(n/m+m),由基本不等式,易得,当n/m=m=sqrt(n)时,我们得到的块的大小是比较合理的。
对于查询x,ans=a[x]+tag[bl[x]]。

代码实现:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll tag[500005],bl[500005],a[500005];
ll cho,n,m,del,l,r,x,blo;
void deal(ll l,ll r,ll del)
{
    for (int i=l;i<=min(r,blo*bl[l]);i++) a[i]+=del;
    if (bl[l]!=bl[r]) 
     for (int i=(bl[r]-1)*blo+1;i<=r;i++) a[i]+=del;
    for (int i=bl[l]+1;i<=bl[r]-1;i++) tag[i]+=
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分块大法 的相关文章

  • 单价数量和总价的公式_小学六年超全的数学公式!家长们赶紧给孩子看过来……...

    小学数学基础知识整理 一到六年级 小学一年级 初步认识加减法 学会基础加减 小学二年级 完善加减法 表内乘法 学会应用题 基础几何图形 小学三年级 学会万以内加减法 长度单位和质量单位 倍数的认知 多位数乘一位数 时间量及单位 长方形和正方
  • 租赁OLED透明屏:打造独特商业体验的智慧选择

    近年来 OLED透明屏技术在商业领域中迅速崛起 其高透明度和卓越的图像质量为商家创造了全新的展示方式 租赁OLED透明屏作为一种智慧选择 不仅能提升品牌形象和吸引力 还能创造与众不同的视觉体验 对此 尼伽将和大家一起深入探讨租赁OLED透明
  • 如何从零开始搭建公司自动化测试框架?

    搭建的自动化测试框架要包括API测试 UI测试 APP测试三类 以上三类其实可以简化为两类 那就是 1 接口自动化测试框架搭建 2 UI自动化测试框架搭建 没问题 安排 且是手把手教你如何搭建以上两类自动化测试框架 刷到这个问题的测试人员
  • Ubuntu上vscode调试C/C++代码

    这篇文章起初是我看了一个B站的视频 作者讲述了如何在Ubuntu的 环境中通过使用vscode调试C C 代码 这个教程非常好 也非常推荐给大家 但是这个教程有一个局限性 就是他在他的公共号上写的教程非常简略 以至于我想再次看一遍 需要重新
  • 微信小程序引入背景图的三种方法

    1 直接在标签里加上style样式 加上背景图
  • K8s集群组件、flannel网络插件、Pod详解

    文章目录 Kubernetes 1 K8S集群架构 2 角色与功能 3 部署环境要求 Master Node 4 flannel插件 flannel是什么 目的 5 Pod 什么是Pod 为什么要使用Pod Pod的生命周期 Pod的创建过
  • STL源码:lis容器(Qt5.8版本)

    初次学习STL源码 很多语义尚且比较模糊 需待二次学习 源文件结构 主要的实现都在
  • Odoo 16 企业版手册 - CRM (2)

    销售线索 在与客户或组织开展业务之前 可以将销售线索视为第一步 如果个人或组织对您的业务感兴趣 您可以将他们的兴趣转换为您的业务 作为销售线索 稍后可以转换为销售机会 在Odoo CRM的帮助下 可以从各种来源收集线索 通过电话 短信 电子
  • windows下安装git

    一 下载Git安装包 1 打开Git的官方网站 https git scm com 2 找到下载页 https git scm com downloads 3 找到Windows版本下载页面 https git scm com downlo
  • 数据结构复杂度分析

    文章目录 前言 一 什么是复杂度分析 二 为什么要进行复杂度分析 三 如何进行复杂度分析 1 大O表示法 2 复杂度分析法则 四 常用的复杂度级别 1 常数阶O 1 2 线性阶O n 3 平方阶O n 4 对数阶O logn 五 不常见的时
  • golang中多种方式设置时区

    关于我 文章首发 我的博客 欢迎关注 go语言的time Now 返回的是当地时区时间 time Now Format 2006 01 02 15 04 05 time设置自定义时区 var cstSh time LoadLocation
  • c++继承-----继承中构造函数写法

    父类中的属性 调用父类的构造函数初始化 成员函数的方式初始化 子类中的构造函数 必须要调用父类构造函数 必须采用初始化参数列表的方式 子类想构造无参对象 父类必须要写无参构造函数 隐式调用构造函数 class Parent public 我
  • 文字验证码:简单有效的账号安全守卫!

    前言 文字验证码不仅是一种简单易懂的验证方式 同时也是保护您的账号安全的重要工具 通过输入正确的文字组合 您可以有效地确认自己的身份 确保只有真正的用户才能访问您的账号 HTML代码
  • 关于mybatis的resultMap映射VO类

    今天的模块需要用到多表联查 将查到的结果放到一个新的实体类中 而这几张表的主键我需要用到 难过的是多个表的主键名都是 id 这就导致新的实体类中多个表的主键字段名无法区分 最后再查询语句中加入别名以区分多个表的主键 本以为这就可以了 但是在
  • Java 通配符泛型例子

    请看下面的代码 其中会发生错误的代码已经注释掉 并且写明了错误类型 总体来说 泛型通配符就是为了支持多态时父子类 接口扩展类之间的相互转换而生 package test import java util ArrayList import j
  • seaborn学习笔记(三):直方图、条形图、条带图

    html font family sans serif ms text size adjust 100 webkit text size adjust 100 body margin 0 article aside details figc
  • [carla]把carla世界坐标系 转换为 俯视地图像素坐标系

    在下面这篇参考博客中介绍了如何手动获取从carla世界坐标系到俯视地图像素坐标系的旋转平移矩阵 我也是采用了一样的思路和代码 这里把实现的过程以及最后所有地图的变换矩阵记录如下 参考博客 carla真实世界坐标系与全局俯视地图像素坐标系变换

随机推荐

  • MetaFormer论文翻译

    MetaFormer A Unified Meta Framework for Fine Grained Recognition 摘要 细粒度视觉分类 FGVC 是一项需要识别属于超类别的多个从属类别的对象的任务 最近最先进的方法通常设计复
  • 七年程序员职业规划:北京、上海、硅谷工作经历分享

    前言 很多年前 刚刚从大学毕业的时候 很多公司来校招 其中最烂俗的一个面试问题是 你希望你之后三到五年的发展是什么 我当时的标准回答是 原话 成为在某一方面能够独当一面的技术专家 后来经历了几家不同的公司 换了不同的方向 才知道这个真是一个
  • SpringBoot为什么没有web.xml了

    SpringBoot为什么没有web xml了 今天我们来放松下心情 不聊分布式 云原生 来聊一聊初学者接触的最多的 java web 基础 几乎所有人都是从 servlet jsp filter 开始编写自己的第一个 hello worl
  • IDEA中快速查看maven依赖树关系, 以及快速解决jar包冲突

    安装Maven Helper 插件 打开pom xml 切换到Dependency Analyzer 即可看见jar包的传递依赖关系 比如 spring boot starter websocket 中已经包含了spring boot st
  • HW5300V3-ISCSI存储运维,看这一篇就够了04-创建启动器

    操作步骤 1 选择 资源分配 gt 主机 gt 启动器 单击 创建 2 系统弹出 创建启动器 对话框 在 类型 中选择启动器类型 为主机添加启动器 操作步骤 1 选择 资源分配 gt 主机 gt 启动器 根据业务需求 选择一个或多个待添加给
  • Golang 同步方式

    目录 1 channel 2 Sync Mutex 3 Sync waitGroup 4 Sync Once 5 Sync context 6 Sync pool 7 atomic包 针对变量进行操作 Sync包简述 收集了一些Golang
  • 快速排序实现(递归与非递归)

    快速排序 前言 快排递归 快速排序 挖坑法 快速排序 Hoare法 快速排序 前后指针法 快速排序的优化 三数取中 小区间优化 快排非递归 前言 首先我们来了解一下什么是快速排序 快速排序是交换排序中的其中一个 是一种比较高效的排序方法 时
  • Splunk 会议回顾: 大数据的关键是机器学习

    Splunk的用户大会已经接近尾声 三天时间的会议里 共进行了160多个主题研讨 涵盖了从安全 运营到商业智能 甚至包括物联网 会议中一遍又一遍出现相同的中心主题 大数据的关键是机器学习 存储不再是一个问题 从运行Hadoop兼容节点的专用
  • rdkafka是否支持基于jks的ssl配置

    不可以 https github com edenhill librdkafka wiki Using SSL with librdkafka 目前rdkafa的支持配置如下链接 https github com edenhill libr
  • selenium 使用chrome时与chromedriver版本不匹配的问题

    这几天想试一下 selenium 但安装配置好之后 总是会报一个奇怪的错误 具体错误信息如下 selenium common exceptions WebDriverException Message unknown error Runti
  • 剑指Offer:(数组)数组中出现次数超过一半的数字

    数组中出现次数超过一半的数字 一 题目 数组中有一个数字出现的次数超过数组长度的一半 请找出这个数字 例如输入一个长度为9的数组 1 2 3 2 2 2 5 4 2 由于数字2在数组中出现了5次 超过数组长度的一半 因此输出2 如果不存在则
  • Destination Host Unreachable 解决方法

    网上有很多种产生这样情况的原因 DNS设置等 我这里却是由于GATEWAY引起的 没改之前是192 168 0 1 导致一直无法ping 通DNS地址 如 ping 8 8 8 8 一直出现Destination Host Unreacha
  • word删除分节符后之前的格式乱了_分页符&分节符,你知道多少

    Word中 我们经常会遇到分页符和分节符 它们对文档排版 打印 页边距调整 批量调整文档格式等非常重要 分隔符包括 分页符和分节符 分页符 是分页的一种符号 实则就是一条虚线 一般是插在每页的后面 它是位于上一页结束以及下一页开始的位置 分
  • VUE-模板

    Vue js 使用了基于 HTML 的模板语法 允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据 所有 Vue js 的模板都是合法的 HTML 所以能被遵循规范的浏览器和 HTML 解析器解析 在底层的实现上 Vue 将模板编
  • [910]Visual Studio2019安装及使用

    一 下载安装包 下载地址1 https visualstudio microsoft com zh hans rr https www baidu com link url b1goBv9 kKk8djltygQxPnrrNv9bLT0nH
  • Qt学习笔记15:setWindowFlags和 setAttribute

    文章目录 1 setWindowFlags QT WindowFlags 2 setAttribute Qt WA DeleteOnClose true 1 setWindowFlags QT WindowFlags setWindowFl
  • linux入门(五)查找命令总结,含五星级命令find详解

    文章目录 查找命令 which bash 查看bash命令存放的路径 whereis bash 查看bash命令存放的路径 PATH变量 locate 查找文件或目录 默认是模糊查找 find 用于查找文件或目录 默认是精确查找 name
  • JMeter常见错误解决方法—你知道几种

    1 Windows 平台 双击 jmeter bin 目录下 jmeter bat 文件 jmeter 无法启动且报错如下 此问题是没有配置 jdk 环境变量所致 配置好 jdk 环境变量即可 2 若提示 ERRORLEVEL 3 错误 则
  • 1041. 考试座位号(15)

    每个PAT考生在参加考试时都会被分配两个座位号 一个是试机座位 一个是考试座位 正常情况下 考生在入场时先得到试机座位号码 入座进入试机状态后 系统会显示该考生的考试座位号码 考试时考生需要换到考试座位就座 但有些考生迟到了 试机已经结束
  • 分块大法

    所谓分块 就是将原序列处理成各个小块 目的是尽量地达到处理和询问之间的平衡 对于分块类问题 常常可以提取出 在给定区间内进行操作 或询问区间内满足给定条件的元素等 接下来 例题 首先是男神hzwer的博客链接 hzwer 因为下述题目皆由此