分块板子题

区间加法,区间求和

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e6 + 10;
#define int long long
ll s[N], b[N], w[N], add[N];
ll l[N], r[N], belong[N];
ll len, tot, n, q;inline void init() {len = sqrt(n), tot = (n + len - 1) / len;for (int i = 1; i <= tot; ++i)l[i] = r[i - 1] + 1, r[i] = i * len;r[tot] = n;for (int i = 1; i <= tot; ++i) {for (int j = l[i]; j <= r[i]; ++j)b[i] += w[j], belong[j] = i;s[i] = s[i - 1] + b[i];}
}inline void modify(int ql, int qr, int c) {int p = belong[ql], q = belong[qr];if (p == q) {for (int i = ql; i <= qr; ++i)w[i] += c, b[p] += c;for (int i = p; i <= tot; ++i)s[i] = s[i - 1] + b[i];return;}for (int i = ql; i <= r[p]; ++i)w[i] += c, b[p] += c;for (int i = qr; i >= l[q]; --i)w[i] += c, b[q] += c;for (int i = p + 1; i <= q - 1; ++i)add[i] += c, b[i] += (r[i] - l[i] + 1) * c;for (int i = p; i <= tot; ++i)s[i] = s[i - 1] + b[i];
}inline ll query(int ql, int qr,ll c) {int p = belong[ql], q = belong[qr];ll res = 0;if (p == q) {for (int i = ql; i <= qr; ++i)res = (res+ w[i] + add[p])%c;return res;}res = s[q - 1] - s[p];for (int i = ql; i <= r[p]; ++i)res = (res+ w[i] + add[p])%c;for (int i = qr; i >= l[q]; --i)res = (res+ w[i] + add[q])%c;return res;}signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >>n;q = n;for (int i = 1; i <= n; i++)cin >> w[i];init();while (q--) {int op, ql, qr, c;cin >> op >> ql >> qr>>c;if (!op){modify(ql, qr, c);}elsecout << query(ql,qr,c+1) << "\n";}return 0;}

分块 + 二分查询 查询区间小于或者大于某个数的个数

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e6+10;
ll b[N],lz[N],w[N];
int l[N],r[N],belong[N];
int len,tot,ql,qr,n,q;inline void Sort(int k){for(int i=l[k];i<=r[k];++i)b[i] = w[i];sort(b+l[k],b+r[k]+1);
}inline void init()
{len = sqrt(n),tot = (n+len-1)/len;r[tot] = n;for(int i=1;i<=tot;i++)l[i] = r[i-1]+1,r[i] =i*len;for(int i=1;i<=tot;++i){for(int j=l[i];j<=r[i];++j)belong[j] = i;Sort(i);}
}inline void modify(int ql,int qr,int c){int p = belong[ql],q=belong[qr];if(p==q){for(int i=ql;i<=qr;++i)w[i]+=c;Sort(p);return;}for(int i=ql;i<=r[p];++i)w[i]+=c;for(int i=qr;i>=l[q];--i)w[i]+=c;Sort(p),Sort(q);for(int i=p+1;i<=q-1;++i)lz[i]+=c;// for(int i=p+1;i<=q-1;++i)Sort(i);}inline int query(int ql,int qr,ll c){int p =belong[ql],q = belong[qr];int res = 0;if(p==q){for(int i=ql;i<=qr;++i)if(w[i]+lz[p]<c)res++;return res;}for(int i=ql;i<=r[p];++i)if(w[i]+lz[p]<c)res++;for(int i=qr;i>=l[q];--i)if(w[i]+lz[q]<c)res++;for(int i=p+1;i<=q-1;++i)res+=lower_bound(b+l[i],b+r[i]+1,c-lz[i])-b-l[i];return res;}int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;q=n;for(int i=1;i<=n;++i)cin>>w[i];init();while(q--){int op,c;cin>>op>>ql>>qr>>c;if(!op)modify(ql,qr,c);else cout<<query(ql,qr,c*c)<<"\n";}}

分块 + 二分 查询区间内某个数的前驱或者后驱

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e6+10;
ll w[N],b[N],lz[N];
int l[N],r[N],belong[N];
int n,q,len,tot,ql,qr,op,c;inline void Sort(int k){for(int i=l[k];i<=r[k];++i)b[i] = w[i];sort(b+l[k],b+r[k]+1);
}inline void init()
{len = sqrt(n),tot = (n+len-1)/len;r[tot] = n;for(int i=1;i<=tot;i++)l[i] = r[i-1]+1,r[i] =i*len;for(int i=1;i<=tot;++i){for(int j=l[i];j<=r[i];++j)belong[j] = i;Sort(i);}
}inline void modify(int ql,int qr,int c){int p = belong[ql],q = belong[qr];if(p==q){for(int i=ql;i<=qr;++i)w[i]+=c;Sort(p);return;}for(int i=ql;i<=r[p];++i)w[i]+=c;for(int i=qr;i>=l[q];--i)w[i]+=c;for(int i=p+1;i<=q-1;i++)lz[i]+=c;Sort(p),Sort(q);}inline int query(int ql,int qr,int c){int p = belong[ql],q = belong[qr];ll res = -1e12;if(p==q){for(int i=ql;i<=qr;++i)if(w[i]+lz[p]<c)res = max(res,w[i]+lz[p]);if(res!=-1e12)return res;return -1;}for(int i=ql;i<=r[p];++i)if(w[i]+lz[p]<c)res = max(res,w[i]+lz[p]);for(int i=qr;i>=l[q];--i)if(w[i]+lz[q]<c)res = max(res,w[i]+lz[q]);for(int i=p+1;i<=q-1;++i){int  t = lower_bound(b+l[i],b+r[i]+1,c-lz[i])-b-l[i];if(t>=1)res = max(res,b[l[i]+t-1]+lz[i]);}if(res!=-1e12)return res;return -1;
}int main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;q = n;for(int i=1;i<=n;i++)cin>>w[i];init();while(q--){cin>>op>>ql>>qr>>c;if(!op)modify(ql,qr,c);else cout<<query(ql,qr,c)<<"\n";}
}

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

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

相关文章

1.5 常用DCC软件

一、DCC软件的定义 所谓DCC&#xff0c;就是Digital Content Creation的缩写&#xff0c;即数字内容创作。DCC的范围包括二维/三维、音频/视频编辑合成、动态/互动内容创作、图像编辑等。 二、常用建模软件 3DS MAX 擅长&#xff1a;硬表面建模、静态物体建模。&#xff08;国…

nextTick

在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的 DOM。 // 修改数据 vm.msg Hello // DOM 还没有更新 Vue.nextTick(function () {// DOM 更新了 })切换页签&#xff0c;不流畅&#xff0c;所以用nextTick&#xff0c;等页…

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 17 章:对话提示

要求CHATGPT高质量回答的艺术&#xff1a;提示工程技术的完整指南—第 17 章&#xff1a;对话提示 对话提示是一种允许模型生成模拟两个或多个实体之间对话的文本的技术。 通过向模型提供上下文和一组角色或实体&#xff0c;以及他们的角色和背景&#xff0c;并要求模型生成他…

视频相似度对比 python opencv sift flann

提取SIFT特征的代码&#xff0c;返回关键点kp及特征描述符des def SIFT(frame):# 创建SIFT特征提取器sift cv2.xfeatures2d.SIFT_create()# 提取SIFT特征kp, des sift.detectAndCompute(frame, None)return kp, des 这行代码是使用SIFT&#xff08;Scale-Invariant Feature…

扔掉sql语句,用 QxOrm 让你的数据库操作从来没有这么简单过!

ORM简介&#xff1a; ORM 全称是 Object Relational Mapping&#xff08;对象关系映射&#xff09;&#xff0c;是一种程序设计技术&#xff0c;用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说&#xff0c;它其实是创建了一个可在编程语言里使用的“虚拟…

Java 新特性探索:从 JDK9 到 JDK17 的关键改进与示例代码

JDK 新特性 JDK9 jshell 交互式工具 引入了一个交互式的编程工具&#xff0c;可以在命令行中(cmd)直接执行和测试 Java 代码片段。 // 示例1&#xff1a;在jshell中执行简单的Java代码 jshell> int a 10; a > 10jshell> int b 20; b > 20jshell> int sum …

基于ssm人事管理信息系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本人事管理信息系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

JPA与MySQL锁实战

前言&#xff1a;最近使用jpa和mysql时&#xff0c;遇到了死锁问题。在解决后将一些排查过程中新学到和复习到的知识点再总结整理一下。首先对InnoDB中锁相关的概念进行介绍&#xff0c;然后展示如何利用JPA提供的排他锁来实现想要的功能&#xff0c;最后对死锁问题进行讨论。 …

MISRA C++ 2008 标准解析

MISRA C 2008是《汽车专用软件的C语言编程指南》&#xff0c;是针对C语言的安全编码标准&#xff0c;适用C 03标准&#xff0c;是汽车行业公认的C语言编码规范&#xff0c;目的是在研发生命周期早期发现软件中的缺陷&#xff0c;预防成本投入会大幅度降低投产后的售后维护成本。…

大屏适配方案一scale()

背景 在做大屏可视化项目的时候&#xff0c;一般设计稿会设计成1920 * 1080&#xff0c;但是页面写死1920 * 1080在2k、4k等分辨率的屏幕下是不适配的。 方案一&#xff1a;css3的缩放属性transform以及scale() 在做项目之前我们需要搞清楚客户的数据可视化平台需要在什么屏幕…

rocketMQ介绍

作用 流量削峰系统解耦 功能 普通消息 同步消息异步消息事务消息顺序消息延迟消息订阅与发布消息过滤消息消费重试死信队列...... 架构设计 1个broker是1台实例每个broker都有从节点&#xff0c;便于做故障转移每个broker对应一个文件&#xff0c;存储数据&#xff1f;还是…

PPOCRv3检测模型和识别模型的训练和推理

PPOCRv3检测模型和识别模型的训练和推理 文章目录 PPOCRv3检测模型和识别模型的训练和推理前言一、环境安装1&#xff0c;官方推荐环境&#xff1a;2&#xff0c;本机GPU环境 二、Conda虚拟环境1.Win10安装Anaconda32.使用conda创建虚拟环境 三、安装PPOCR环境1&#xff0c;安装…

数据可视化免费化的双面影响探析

近年来数据可视化的免费化也越来越明显&#xff0c;今天就以我作为可视化设计师的经验来和大家分析一下&#xff0c;数据可视化工具免费化所带来的利与弊。 先从好处入手&#xff0c;最明显的就是免费化可以让数据可视化工具得到更广泛的使用。 免费数据可视化工具使得更多人可…

生命在于折腾——使用PD打开OVA格式虚拟机

一、前言 下载了一个封装的工具箱虚拟机&#xff0c;格式是OVA的&#xff0c;PD无法直接打开&#xff0c;之前成功转换后打开过&#xff0c;但那时候没有记录&#xff0c;今天记录一下。 二、过程 有两种方法 1、去vmware官网下载工具VMware OVF Tool 地址&#xff1a;htt…

代码随想录算法训练营第四十二天 _ 动态规划_01背包问题、416.分割等和子集。

学习目标&#xff1a; 动态规划五部曲&#xff1a; ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录&#xff01; 60天训练营打卡计划&#xff01; 学习内容&#xff1a; 二维数组处理01背包问题 听起来…

大屏图表汇总echarts圆环

圆环效果示例 代码如下 storageStaChart() {let color [#009976,#15E6B5]let charts echarts.init(document.getElementById(storageStaChart));let option this.getPieOption(color);charts.setOption(option, true);}, getPieOption(color) {let data [];data.push({val…

Java高级技术-单元测试

单元测试 Junit单元测试框架 Junit单元测试-快速入门 方法类 测试类 Junit框架的基本注解

[Geek Challenge 2023] web题解

文章目录 EzHttpunsignn00b_Uploadeasy_phpEzRceezpythonezrfi EzHttp 按照提示POST传参 发现密码错误 F12找到hint&#xff0c;提示./robots.txt 访问一下&#xff0c;得到密码 然后就是http请求的基础知识 抓包修改 最后就是 我们直接添加请求头O2TAKUXX: GiveMeFlag 得到…

FPGA高端项目:UltraScale GTH + SDI 视频编解码,SDI无缓存回环输出,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、详细设计方案设计框图3G-SDI摄像头LMH0384均衡EQUltraScale GTH 的SDI模式应用UltraScale GTH 基本结构参考时钟的选择和分配UltraScale GTH 发送和接收处理流程UltraScale…

kali linux使用Proxmark3

其实kali linux下已经集成了Proxmark3命令&#xff0c;但是由于Proxmark3是开源设备&#xff0c;有时候系统默认安装的版本并不能很好的使用&#xff0c;因此需要手动编译最新的版本。 step 1 准备Proxmark3编译环境&#xff0c;因为kali linux比较激进&#xff0c;很多老旧的…