当前位置: 首页 > news >正文

【思维】根号分治

写在前面的话:

个人理解 根号分治本身就是一种卡着评测机过题的做法,所以非必要不要写 #define int long long !!!


本篇博客参考:暴力美学——浅谈根号分治

做到过两三题根号分治了,来总结一下这个算法

与其说是算法,不如说是一种思维

根号分治的主要思路是,数据范围很大的时候(指不能接受 n 2 n^2 n2 复杂度,但可以接受 n n n\sqrt n nn 复杂度的情况,通常是 1 e 8 − 1 e 9 1e8-1e9 1e81e9),将数据分为两个部分,一个是小于 n \sqrt n n 的部分,一个是大于等于 n \sqrt n n 的部分,两个部分分别采用不同的处理方式:

  • 第一个部分(需要处理的间隔小的部分),使用技巧计算,例如前缀和等预处理算法
  • 第二个部分(需要处理的间隔大的部分),暴力计算

下面举例说明几个可以使用根号分治的场景

    • 数据结构
    • 数论

数据结构

来一道例题:F. Remainder Problem

题目意思是,给出一个长度为 5 e 5 5e5 5e5 的序列,初始值都是 0,给出 q 组操作,每组操作包括 op x y

  • op == 1 时,a[x] += y
  • op == 2 时,输出下标模 x 等于 y 的位置的值之和

我们可以想到两种做法:

  1. 暴力处理,第一个操作就直接加,复杂度 O ( 1 ) O(1) O(1),第二个操作就遍历一遍数组,复杂度 O ( n ) O(n) O(n),这样最坏的复杂度是 O ( n q ) O(nq) O(nq),T
  2. 利用二维数组预处理,b[i][j] 表示模 i 等于 j 的位置上的值之和,第一个操作就遍历更新 b[i][j],复杂度 O ( n ) O(n) O(n),第二个操作直接输出,复杂度 O ( 1 ) O(1) O(1),最坏的复杂度是 O ( n q ) O(nq) O(nq),T

那能不能把两者结合起来呢?

我们发现如果 x 比较大的话,暴力处理的第二个操作复杂度就不会太高,但是不能进行预处理(空间上不能接受),x 比较小的话,可以进行预处理,而暴力操作的复杂度就会比较高

说到这里就清楚啦:x 大就第一个做法,x 小就第二个做法,大小的分界线是什么呢?就是 n \sqrt n n

c o d e code code

#include <bits/stdc++.h>using namespace std;// #define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 5e5 + 10;
const int maxn = 710;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;int a[N], b[710][710];void solve()
{int q;cin >> q;while (q -- ){int op, x, y;cin >> op >> x >> y;if (op == 1){a[x] += y;for (int i = 1; i < 700; i ++ ) b[i][x % i] += y;}else{if (x < 700) cout << b[x][y] << '\n';else{int res = 0;for (int i = y; i <= 5e5; i += x) res += a[i];cout << res << '\n';}}}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while (t--){solve();}
}

数论

看这题:D. Two Arithmetic Progressions

题目给出这样的两个数列:

  • a 1 k + b 1 a_1k+b_1 a1k+b1
  • a 2 k + b 2 a_2k+b_2 a2k+b2

k > = 0 k>=0 k>=0

然后给出 [ l , r ] [l,\ r] [l, r],问这个区间里有多少数同时存在于上面的两个数列里( a 、 b a、b ab 的范围都是 2 e 9 2e9 2e9

我们还是想出两种办法:

  • k 从 0 开始,枚举第一个数列的数,直到找到一个在第二个数列里也出现的数(可以发现最多找 max(a1, a2) 次),之后每次加上循环节(也就是 a 1 a_1 a1 a 2 a_2 a2 的最小公倍数)即可
  • 枚举 a a a 值较大的数列,符合条件就答案+1,完全暴力

maxx = max(a1, a2)

  • 当 maxx 比较大的时候,数列里的值的数量就会比较少,可以通过枚举解决问题,但使用第一种方法就会T

  • 当 maxx 比较小的时候,枚举会T,但可以使用第一种找循环节的方法

所以通过这个进行根号分治,结束!

(其实这题的正解并不是根号分治,但是使用这种思想可以直接碾过去cf2500的题!!好爽ovo)

c o d e code code

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 2e9;
const int maxn = 710;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int a1, b1, a2, b2, l, r;cin >> a1 >> b1 >> a2 >> b2 >> l >> r;int maxx = max(a1, a2);if (maxx < sqrt(N)) // 找最小公倍数{for (int i = 0; i <= maxx; i ++ ){int tmp = a1 * i + b1;if (abs(tmp - b2) % a2 == 0){int lcmm = lcm(a1, a2);int st = max({l, b1, b2});if (tmp < st){tmp += ((st - tmp) / lcmm + 1) * lcmm;tmp = st + (tmp - st) % lcmm;}else tmp = st + (tmp - st) % lcmm;if (tmp > r) continue;cout << (r - tmp) / lcmm + 1 << '\n';return;}}cout << 0 << '\n';}else // 暴力{int ans = 0;if (a1 < a2) swap(a1, a2), swap(b1, b2);for (int i = b1; i <= r; i += a1){if (i < l || i < b2) continue;if ((i - b2) % a2 == 0) ans ++ ;}cout << ans << '\n';}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while (t--){solve();}
}

相关文章:

【思维】根号分治

写在前面的话&#xff1a; 个人理解 根号分治本身就是一种卡着评测机过题的做法&#xff0c;所以非必要不要写 #define int long long &#xff01;&#xff01;&#xff01; 本篇博客参考&#xff1a;暴力美学——浅谈根号分治 做到过两三题根号分治了&#xff0c;来总结一下…...

Linux线程(三)死锁与线程同步

目录 一、什么是死锁 死锁的四个必要条件 如何避免死锁 避免死锁算法 二、Linux线程同步 三 、条件变量 1、条件变量基本原理 2、条件变量的使用 3、条件变量使用示例 为什么 pthread_cond_wait 需要互斥量? 一、什么是死锁 死锁是计算机科学中的一个概念&#xff0c;…...

SpringAMQP 发布订阅-TopicExchange

根据这个模型编写代码: RabbitListener(bindings QueueBinding(value Queue(name "topic.queue1"),exchange Exchange(name "itcast.topic",type ExchangeTypes.TOPIC),key {"china.#"}))public void listenTopicQueue1(String msg){Syst…...

uniapp h5 配置代理服务器

"devServer": {"disableHostCheck": true,"proxy": {"/api": {// 需要被代理的后台地址"target": "http://自己的地址","changeOrigin": true,"secure": false,"pathRewrite": {&q…...

使用Apache Spark从MySQL到Kafka再到HDFS的数据转移

使用Apache Spark从MySQL到Kafka再到HDFS的数据转移 在本文中&#xff0c;将介绍如何构建一个实时数据pipeline&#xff0c;从MySQL数据库读取数据&#xff0c;通过Kafka传输数据&#xff0c;最终将数据存储到HDFS中。我们将使用Apache Spark的结构化流处理和流处理功能&#…...

一篇文章拿下Redis 通用命令

文章目录 Redis数据结构介绍Redis 通用命令命令演示KEYSDELEXISTSEXPIRE RedisTemplate 中的通用命令 本篇文章介绍 Redis 的通用命令, 通用命令在 Redis 的所有数据类型下都使用, 学好通用命令可以让我们更好的使用 Redis. Redis数据结构介绍 Redis 是一个key-value的数据库&…...

锂电池充电充放电曲线分析

前言 锂电池的充电曲线通常包括三个阶段:恒流充电阶段、恒压充电阶段和滞后充电阶段。在恒流充电阶段,电流保持恒定,电压逐渐增加;在恒压充电阶段,电压保持恒定,电流逐渐减小;在滞后充电阶段,电流进一步减小,电池开始充满。通过监测这些阶段的电流和电压变化,可以评…...

vue3 第二十九节 (vue3 事件循环之nextTick)

引言 vue 项目中为什么要使用 nextTick 这个函数&#xff0c;是做什么用的&#xff0c;解决了哪些问题 1、nextTick 作用 用于处理DOM更新完成之后&#xff0c;执行回调函数的方法&#xff1b; 2、实现方案 vue2 中 nextTick() 是基于浏览器的 异步队列和微任务队列而执行…...

使用Flask-SocketIO构建实时Web应用

文章目录 准备工作编写代码编写HTML模板运行应用 随着互联网的发展&#xff0c;实时性成为了许多Web应用的重要需求之一。传统的HTTP协议虽然可以实现实时通信&#xff0c;但是其长轮询等机制效率低下&#xff0c;无法满足高并发、低延迟的需求。为了解决这一问题&#xff0c;诞…...

可重构柔性装配产线:为工业制造领域注入了新的活力

随着科技的飞速发展&#xff0c;智能制造正逐渐成为引领工业革新的重要力量。在这一浪潮中&#xff0c;可重构柔性装配产线以其独特的技术优势和创新理念&#xff0c;为工业制造领域注入了新的活力&#xff0c;开启了创新驱动的智能制造新篇章。 可重构柔性装配产线是基于富唯智…...

懒人网址导航源码v3.9

测试环境 宝塔Nginx -Tengine2.2.3的PHP5.6 MySQL5.6.44 为防止调试错误&#xff0c;建议使用测试环境运行的php与mysql版本 首先用phpMyAdmin导入数据库文件db/db.sql 如果导入不行&#xff0c;请直接复制数据库内容运行sql语句也可以 再修改config.php来进行数据库配置…...

springboot 开启缓存 @EnableCaching(使用redis)

添加依赖 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>application.yml 配置redis连参数 spring:# redis 配置redis:# 地址host: 127.0.0.…...

Adobe After Effects AE v24.3.0 解锁版 (视频合成及视频特效制作)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…...

Qt---文件系统

一、基本文件操作 1. QFile对文件进行读和写 QFile file( path 文件路径) 读&#xff1a; file.open(打开方式) QlODevice::readOnly 全部读取->file.readAll()&#xff0c;按行读->file.readLine()&#xff0c;atend()->判断是否读到文件尾 …...

ruoyi-vue-pro 使用记录(2)

ruoyi-vue-pro 使用记录&#xff08;2&#xff09; 数据库商城商品模块数据表营销数据库交易数据库统计数据库 数据库 商城 参考官方文档 ruoyi-vue-pro yudao 项目商城 mall 模块启用及相关SQL脚本 商品模块&#xff08;中心&#xff09;以 product_ 作为前缀的表交易模块…...

centos7中如何全局搜索一下nginx的配置文件?

在CentOS 7中搜索Nginx的配置文件&#xff0c;你可以使用一些常用的命令行工具&#xff0c;比如find、grep等。这些工具可以帮助你在文件系统中查找文件&#xff0c;也可以用来查找Docker容器内部的文件&#xff0c;只要你知道如何访问容器的文件系统。 1. 搜索系统中的Nginx配…...

2024年5月10日有感复盘

2024年5月10日有感复盘 时间 今天是一个很美好的一天&#xff0c;原因是很平凡&#xff0c;读书很平凡&#xff0c;玩游戏很平凡&#xff0c;然后生活很平凡&#xff0c;未来可期&#xff0c;听歌很舒服&#xff0c;很喜欢一个人呆在图书馆的感觉&#xff0c;很喜欢发呆&…...

C++通过json文件配置参数

一、安装nlohmann json nlohmann json&#xff1a;安装_nlohmann安装-CSDN博客 依次执行下面指令&#xff1a; git clone https://gitee.com/cuihongxi/mov_from_github.gitcd json-developmkdir buildcd buildcmake ..makesudo make install 二、安装完成后使用 #include…...

idea连接远程仓库

git ->克隆。 url为远程仓库的地址&#xff0c;输入好后&#xff0c;选择项目存放目录&#xff0c;再点击克隆 点击新窗口打开。 切换到对应分支...

初始Django

初始Django 一、Django的历史 ​ Django 是从真实世界的应用中成长起来的&#xff0c;它是由堪萨斯&#xff08;Kansas&#xff09;州 Lawrence 城中的一个网络开发小组编写的。它诞生于 2003 年秋天&#xff0c;那时 Lawrence Journal-World 报纸的程序员 Adrian Holovaty 和…...

TI MSPM0G3105-Q1汽车MCU实战解析:从核心特性到硬件设计

1. 项目概述&#xff1a;为什么是MSPM0G3105-Q1&#xff1f;在汽车电子和工业控制领域摸爬滚打十几年&#xff0c;我经手过的MCU型号少说也有几十款。每次启动一个新项目&#xff0c;选型都是头等大事&#xff0c;它直接决定了后续开发的难易度、系统的稳定性和最终产品的成本。…...

中小型企业服务器常见隐患 + 标准化运维维护方案总结

做运维多年&#xff0c;接触过大量中小企业服务器&#xff0c;总结几个最常见、最致命的问题&#xff1a;1、服务器常年不关机、不巡检&#xff0c;磁盘爆满无人察觉&#xff1b;2、对外开放端口过多&#xff0c;没有安全策略&#xff0c;极易被暴力破解&#xff1b;3、数据库无…...

从排名监控到答案诊断:一个算法工程师眼中的GEO工具技术选型标准

本文从工程师视角&#xff0c;剖析生成式搜索优化中的多模型诊断瓶颈&#xff0c;通过异步调度架构与沙盒隔离策略&#xff0c;实现品牌提及率的精准监控与算力可控消耗&#xff0c;为GEO工具选型提供技术验证依据。 传统监控工具在生成式搜索场景面临三重策略瓶颈&#xff1a;…...

Java 高级特性高频面试题 30 道(含答案)【简洁版】

覆盖泛型、反射、注解、Lambda/Stream、函数式接口、动态代理、JDK8 新特性、线程池、JVM、IO/NIO、序列化等核心高频考点&#xff0c;适合中高级 Java 工程师面试。一、泛型&#xff08;3 题&#xff09;什么是 Java 泛型&#xff1f;泛型的作用是什么&#xff1f;答案&#…...

Go语言RESTful API设计与实现最佳实践

Go语言RESTful API设计与实现最佳实践 引言 RESTful API已经成为现代Web服务的标准设计风格。本文将深入探讨如何使用Go语言设计和实现高质量的RESTful API&#xff0c;涵盖设计原则、实现技巧和最佳实践。 一、RESTful设计原则 1.1 REST架构约束 约束说明实现方式客户端-服务器…...

如何快速掌握Ender-3 3D打印机:新手必看的完整配置指南

如何快速掌握Ender-3 3D打印机&#xff1a;新手必看的完整配置指南 【免费下载链接】Ender-3 The Creality3D Ender-3, a fully Open Source 3D printer perfect for new users on a budget. 项目地址: https://gitcode.com/gh_mirrors/en/Ender-3 Ender-3 3D打印机是一…...

XCOM 2模组管理器终极指南:为什么AML是你的最佳选择?

XCOM 2模组管理器终极指南&#xff1a;为什么AML是你的最佳选择&#xff1f; 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh…...

DownKyi深度解析:重新定义B站视频内容管理的新范式

DownKyi深度解析&#xff1a;重新定义B站视频内容管理的新范式 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff…...

爱波克 Apoquel(奥拉替尼)作用与上市,全球首个犬用 JAK 抑制剂

奥拉替尼是全球首个获批用于兽医的 JAK 抑制剂&#xff0c;2013 年 5 月美国 FDA 获批&#xff0c;2023 年 6 月推出咀嚼片剂型&#xff0c;提升用药依从性Zoetis。其作用机制为选择性抑制 JAK1&#xff0c;阻断 IL-4、IL-13、IL-31 等关键致痒与促炎细胞因子信号&#xff0c;从…...

AI圈今日大事(2026-05-21)

AI圈今日大事&#xff08;2026-05-21&#xff09;1. 阿里云峰会&#xff1a;真武M890芯片 Qwen3.7-Max 双料齐发今日阿里云峰会上&#xff0c;阿里平头哥正式发布新一代训推一体AI芯片 真武M890&#xff1a;性能&#xff1a;相比前代真武810E提升3倍&#xff0c;内置144GB显存…...