分块算法模板更新

基础模板(区间修改,求区间和)

#include "bits/stdc++.h"
using namespace std;
#define int long long 
const int N = 100010;int sum[N],add[N],a[N],b[N];
int l[N],r[N];void change(int l1,int r1,int k)
{int p=b[l1],q=b[r1];if(p==q){for (int i=l1;i<=r1;i++){a[i]+=k;sum[p]+=(r1-l1+1)*k;}}else {for (int i=p+1;i<=q-1;i++){add[i]+=k;}for (int i=l1;i<=r[p];i++){a[i]+=k;}sum[p]+=(r[p]-l1+1)*k;for (int i=l[q];i<=r1;i++){a[i]+=k;}sum[q]+=(r1-l[q]+1)*k;	}}void ask(int l1,int r1)
{int p=b[l1],q=b[r1];int ans=0;if(p==q){for (int i=l1;i<=r1;i++){ans+=a[i];}ans+=add[p]*(r1-l1+1);}else {for (int i=l1;i<=r[p];i++){ans+=a[i];}ans+=add[p]*(r[p]-l1+1);for (int i=l[q];i<=r1;i++){ans+=a[i];}ans+=add[q]*(r1-l[q]+1);for (int i=p+1;i<=q-1;i++){ans+=sum[i];ans+=add[i]*(r[i]-l[i]+1);}}cout<<ans<<endl;}signed main()
{int n,m;cin>>n>>m;int len=sqrt(n);//长度为sqrt(n);for (int i=1;i<=n;i++){cin>>a[i];}for (int i=1;i<=len;i++){l[i]=(i-1)*len+1;r[i]=i*len;}if(r[len]<n){len++;l[len]=r[len-1]+1;r[len]=n;}for (int i=1;i<=len;i++){for (int j=l[i];j<=r[i];j++){b[j]=i;sum[i]+=a[j];}}while(m--){int  o,x,y,k;cin>>o;if(o==1){cin>>x>>y>>k;change(x,y,k);}else {cin>>x>>y;ask(x,y);}}}

区间修改,区间大于某值的数量

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int n,q,m,block;
int a[1000001],b[1000001],pos[1000001],add[1000001];
void reset(int x)
{int l=(x-1)*block+1,r=min(x*block,n);for(int i=l;i<=r;i++)b[i]=a[i];sort(b+l,b+r+1);
}
int find(int x,int v)
{int l=(x-1)*block+1,r=min(x*block,n);int last=r;while(l<=r){int mid=(l+r)>>1;if(b[mid]<v)l=mid+1;else r=mid-1;}return last-l+1;
}
void update(int x,int y,int v)
{if(pos[x]==pos[y]){for(int i=x;i<=y;i++)a[i]=a[i]+v;}else {for(int i=x;i<=pos[x]*block;i++)a[i]=a[i]+v;for(int i=(pos[y]-1)*block+1;i<=y;i++)a[i]=a[i]+v;}reset(pos[x]);reset(pos[y]);for(int i=pos[x]+1;i<pos[y];i++)add[i]+=v;
}
int query(int x,int y,int v)
{int sum=0;if(pos[x]==pos[y]){for(int i=x;i<=y;i++)if(a[i]+add[pos[i]]>=v)sum++;}else {for(int i=x;i<=pos[x]*block;i++)if(a[i]+add[pos[i]]>=v)sum++;for(int i=(pos[y]-1)*block+1;i<=y;i++)if(a[i]+add[pos[i]]>=v)sum++;}for(int i=pos[x]+1;i<pos[y];i++)sum+=find(i,v-add[i]);return sum;
}
int main()
{scanf("%d%d",&n,&q);block=int(sqrt(n));for(int i=1;i<=n;i++){scanf("%d",&a[i]);pos[i]=(i-1)/block+1;b[i]=a[i];}if(n%block)m=n/block+1;else m=n/block;for(int i=1;i<=m;i++)reset(i);for(int i=1;i<=q;i++){char ch[5];int x,y,v;scanf("%s%d%d%d",ch,&x,&y,&v);if(ch[0]=='M')update(x,y,v);else printf("%d\n",query(x,y,v));}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java常用API】简单爬虫练习题

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

0基础学习VR全景平台篇第146篇:为什么需要3D元宇宙编辑器?

一.什么是3D元宇宙编辑器&#xff1f; 3D元宇宙编辑器是全新3DVR交互渲染创作工具&#xff0c;集3D建模、虚拟展厅、AI数字人等能力&#xff0c;渲染和虚拟现实技术于一身的生产力工具。 具有跨平台和随时随地编辑等特点&#xff0c;可广泛应用于展会、展厅、博物馆、可视化园…

uniapp_微信小程序客服

一、调用api 二、代码 <button open-type"contact">客服</button> 三、小程序后台添加客服人员就行

Ubuntu学习笔记之Shell与APT下载工具

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ 一、Ubuntu Shell操作 简单的说Shell 就是敲命令。国内把 Linux 下通过命令行输入命令叫…

RabbitMQ docker 单机部署

RabbitMQ docker 单机部署 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一&#xff1a;在线拉取 docker pull rabbitmq:3.8-management1.2.安装MQ 执行下面的命令来运行MQ容器&#xff1a; docker run \-e RABBITMQ_DEFAULT_USERroot \-e RAB…

CSS隐藏video标签中各种控件

1.edio标签加上controls会出现视频控件&#xff0c;如播放按钮、进度条、全屏、观看的当前时间、剩余时间、音量按钮、音量的控制条等等 <video type"video/mp4" src"" autoplay"" style"width: 400px; height: 300px;" id"e…

idea 2023 spring initializr 没有JDK1.8选项的解决方法

在升级最新版本的IDEA后,新建项目里面的 spring initializr的选项里面已经没有了JDK1.8的选项了,原因是spring官方的initializr https://start.spring.io/ 现在主推3.x版本这个最低要求是JDK17, 解决方法: 将IDEA默认的 Initializr的URL https://start.spring.io/换成第三方…

3/21 work

自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面。&#xff08;不要使用课堂上的图片和代码&#xff0c;自己发挥&#xff0c;有利于后面项目的完成&#xff09; 要求&#xff1a; 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件相关设置&#xff0c;通…

记一次 .NET某游戏后端API服务 CPU爆高分析

一&#xff1a;背景 1. 讲故事 前几天有位朋友找到我&#xff0c;说他们的API服务程序跑着跑着CPU满了降不下去&#xff0c;让我帮忙看下怎么回事&#xff0c;现在貌似民间只有我一个人专注dump分析&#xff0c;还是申明一下我dump分析是免费的&#xff0c;如果想学习.NET高级…

CDH中重装Kafka

##事情缘由 之前测试集群kafka安装在01、02、04节点&#xff0c;但是01节点经常宕机&#xff0c;于是直接在CM页面上把01节点上的kafka broker手动删除了。。。 然后重新再03节点安装了新的kafka broker 于是kafka集群不能使用了&#xff01;&#xff01;&#xff01; ##初始化…

Springboot中Tomcat配置及切换Undertow

一、Tomcat配置 1. 通过application.yml配置 以下展示常用配置 server:port: 8182 # 配置端口tomcat:threads:max: 10 # 最大工作线程&#xff0c;默认是200min-spare: 5 # 最小工作线程&#xff0c;默认是10accept-count: 200 # tomcat启动线程达到最大值后&#xff0c;接受…

JSP基础进阶(案例代码)

JDBC技术 通过JDBC连接MySQL数据库 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8" import "java.sql.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&quo…

大数据开发(Spark面试真题)

大数据开发&#xff08;Spark面试真题&#xff09; 一、Spark基础和核心概念1、什么是Spark Streaming&#xff1f;简要描述其工作原理。2、什么是Spark内存管理机制&#xff1f;请解释其中的主要概念&#xff0c;并说明其作用。3、请解释一下Spark中的shuffle是什么&#xff0…

AnythingLLM

AnythingLLM是一款私人ChatGPT&#xff0c;它与传统的ChatGPT相比&#xff0c;具有更高的灵活性和可定制性。AnythingLLM是一个全栈应用程序&#xff0c;它能够将任何文档、资源或内容片段转化为上下文&#xff0c;供任何LLM&#xff08;大语言模型&#xff09;在聊天时作为参考…

大型语言模型(LLM)全解读

大型语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是指使用大规模数据集进行预训练的神经网络模型&#xff0c;用于生成人类类似的自然语言文本。LLM在自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;领域有着广泛的…

idea快捷鍵

在IntelliJ IDEA中&#xff0c;如果你无法通过鼠标点击打开spring-boot-starter-web的依赖&#xff0c;你可以尝试以下几种方法&#xff1a; 快捷键方式&#xff1a;选中spring-boot-starter-web依赖&#xff0c;然后按下Ctrl B&#xff08;Windows和Linux&#xff09;或者Com…

两个基本功不足导致的bug

作为程序员&#xff0c;基本功不好&#xff0c;可能会在工作中经常碰到一些看起来很隐蔽的 bug&#xff0c;乍看没毛病&#xff0c;自己半天还找不到问题所在。 但是&#xff0c;如果基本功扎实的同学可能一眼就能看出来。 一、HashMap 取不到值 Map<Integer, Integer>…

Scikit-Learn逻辑回归(二)

Scikit-Learn逻辑回归二&#xff1a;多项式与正则化 1、多项式回归回顾1.1、逻辑回归为什么要使用多项式1.2、多项式回归及原理 2、逻辑回归与多项式 1、多项式回归回顾 本文接上篇&#xff1a;Scikit-Learn逻辑回归(一) 上篇中&#xff0c;我们详细介绍了逻辑回归的概念、原理…

哪种造型更适合铸铁焊接平台——河北北重厂家专业设计制造

哪种造型更适合焊接平台取决于具体的需求和条件。以下是一些常见的焊接平台造型供参考&#xff1a; 平面平台&#xff1a;这是最简单的造型&#xff0c;适合进行标准的焊接工作。平面平台提供了稳定的工作表面&#xff0c;便于操作和移动。 运输平台&#xff1a;如果需要频繁移…

spring boot 如何升级 Tomcat 版本

在Spring Boot应用程序中升级内嵌的Tomcat版本通常涉及以下几个步骤&#xff1a; 1. 确定当前使用的Tomcat版本 首先&#xff0c;你需要确定你的Spring Boot应用程序当前使用的Tomcat版本。这可以通过查看项目的pom.xml或build.gradle文件来完成&#xff0c;其中会列出所有的…