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

倍增算法C++

倍增

倍增算法是一种优化算法,通常用于某些需要高效计算指数幂的场景。它基于分治的思想,通过反复求平方来实现快速计算指数幂的目的。在实际应用中,倍增算法经常用于解决最近公共祖先问题、二分查找等。

1、快速幂详解

ksm核心代码

在这里插入图片描述

倍增就是基于二进制的指数倍相乘,使得效率更高。任何一个数的幂都可以看作二进制来计算。

ll ksm(ll a,ll n){ll r=1;while(n!=0){if(n&1){r*=a;}a=a*a;n=n>>1;}return r;
}

简单应用:

  • 计算a^n mod m
  • 计算斐波那契数列第n项
  • 将线性变换重复n次

注:矩阵的乘法计算

2、链式前向星举例

2.1、图

关于图的定义方式:

struct Edge {int next; // 下一条边的编号int to;   // 这一条边的终点int w;    // 权值
} e[maxn];

一般的输入方式都是:u -> v w 边 边 权

ll tot, head[maxn];
void add(ll u, ll v, ll w) {++tot; // 加入一条新边的编号e[tot].next = head[u]; // 新的边插在原来的第一个位置,所以next指向原来的head[u]e[tot].w = w;e[tot].to = v; // 下一条边head[u] = tot; // 新的边成为第一条变了
}

代码案例:

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
using namespace std;
using ll = long long;
#define maxn 110001
struct Edge {int next; // 下一条边的编号int to;   // 这一条边的终点int w;    // 权值
} e[maxn];
ll tot, head[maxn];
void add(ll u, ll v, ll w) {++tot; // 加入一条新边的编号e[tot].next = head[u]; // 新的边插在原来的第一个位置,所以next指向原来的head[u]e[tot].w = w;e[tot].to = v; // 下一条边head[u] = tot; // 新的边成为第一条变了
}
int main() {IOS;// 添加边add(1, 2, 10);add(1, 3, 20);add(2, 4, 30);add(3, 4, 40);add(4, 5, 50);	// 打印图的邻接表for (int i = 1; i <= 5; ++i) {cout << "Vertex " << i << ": ";for (int j = head[i]; j != 0; j = e[j].next) {cout << "(" << e[j].to << ", " << e[j].w << ") ";}cout << endl;}return 0;
}

2.2、树

LCA问题

	int n;cin>>n;vector<vector<int>> graph(n+1);for(int i=1;i<n;i++){//n-1 条边int u,v;cin>>u>>v;graph[i].push_back(u);graph[i].push_back(v);//邻接矩阵}//倍增数组vector<array<int,21>> fa(n+1);//array<int,21> 固定的数组大小21vector<int> dep(n+1);//深度function<void(int,int)> dfs = [&](int x,int f){fa[x][0]=f;for(int i=1;i<=20;i++){fa[x][i]=fa[fa[x][i-1]][i-1];}//遍历数组for(const auto& tox:graph[x]){if(tox==f)continue;dep[tox]=dep[x]+1;dfs(tox,x);}};dfs(1,0);auto glca = [&](int x,int y){if(dep[x]<dep[y])swap(x,y);int d=dep[x]-dep[y];for(int i=20;i>=0;i--){if(d>>i & 1)x=fa[x][i];}if(x==y)return x;for(int i=20;i>=0;i--){if(fa[x][i] != fa[y][i]){x=fa[x][i];y=fa[y][i];}}return fa[x][0];};

相关文章:

倍增算法C++

倍增 倍增算法是一种优化算法&#xff0c;通常用于某些需要高效计算指数幂的场景。它基于分治的思想&#xff0c;通过反复求平方来实现快速计算指数幂的目的。在实际应用中&#xff0c;倍增算法经常用于解决最近公共祖先问题、二分查找等。 1、快速幂详解 ksm核心代码 倍增就是…...

uniapp制作--进步器的选择

介绍&#xff1a; 进步器的选择,一般用于商城购物选择物品数量的场景 注意&#xff1a;该输入框只能输入大于或等于0的整数 效果展示&#xff1a; 代码展示&#xff1a; 以下是一个简单的购物车页面示例&#xff0c;包括选择商品和显示数量的功能&#xff1a; 在这个示例中…...

前端高频面试--查缺补漏篇

什么是进程和线程&#xff0c;有什么区别 进程&#xff1a;进程是程序的一次执行过程&#xff0c;是动态的过程&#xff0c;有自身产生、存在、消亡的过程。 线程&#xff1a;线程由进程创建&#xff0c;是进程的一个实体。一个进程可以拥有多个线程。 举个例子&#xff1a;…...

【计算机学习】-- 网页视频加速

系列文章目录 文章目录 系列文章目录前言一、开发者选项二、定义和用法1.基础语法&#xff1a;2.什么是uncaught TypeError:Cannot read properties of null? 二、开发者工具面板&#xff1a;1.Elements面板&#xff1a;2.Console面板&#xff1a; 总结 前言 一、开发者选项 …...

系统运维-Linux配置C、C++、Go语言编译环境

C yum install gcc -y #安装gcc编译器 gcc --version #验证环境gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4) Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even f…...

【设计模式】(二)设计模式六大设计原则

一、 设计原则概述 设计模式中主要有六大设计原则&#xff0c;简称为SOLID &#xff0c;是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的)&#xff0c;六大设计原则分别如下&#xff1a; ​ 1、单一职责原则&#xff08;Single Responsibitity Principle&#…...

go-zero官网

go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性&#xff0c;经受了充分的实战检验。 go-zero官网&#xff1a;go-zero 缩短从需求到上线的距离...

Redis的应用场景以及常见问题(持续更新)

一、使用场景 1&#xff0c;在大型的秒杀库存扣减&#xff0c;app首页流量高峰&#xff0c;很容易将传统的关系型数据库&#xff08;mysql,oracle等&#xff09;给压垮 2&#xff0c;还有很多没必要持久化的数据&#xff0c;比如说短信验证码&#xff0c;点赞数等 3&#xff0c…...

前端添加压缩包内文件名称校验

1. tar包内文件名称校验 1. 读取tar包内所有的文件名称 export class TarReader {fileInfo: any[]buffer: string | ArrayBufferconstructor() {this.fileInfo []}readFile(file) {return new Promise(resolve > {const reader new FileReader()reader.onload event &g…...

redis02 安装

官网下载 传送门https://redis.io/download/#redis-downloads 安装Redis mac m1安装 下载你需要版本的软件包放到指定的目录下进行解压 cd 到解压好的redis目录 运行下面的命令进行编译测试 sudo make test 中途可能会提示你安装make工具&#xff0c;按提示安装即可&…...

#QT(QT时钟)

1.IDE&#xff1a;QTCreator 2.实验 3.记录 qtime&#xff08;qt的时间类&#xff09; qtimer&#xff08;qt的定时类&#xff09; 4.代码 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> // #include <QTimer&g…...

T-RAG:结合实体检测的增强检索生成模型

内容摘要&#xff1a; T-RAG是一种新的大型语言模型&#xff08;LLM&#xff09;应用框架&#xff0c;在保证数据隐私的同时&#xff0c;提高了对私有企业文档的问答系统性能。T-RAG通过结合已有的增强检索生成&#xff08;RAG&#xff09;框架、自定义的开源语言模型以及一个实…...

u-boot: NAND 驱动简介

文章目录 1. 前言2. NAND 初始化3. 访问 NAND 设备3.1 查看 NAND 设备信息3.1.1 查看 NAND 设备基本信息3.1.2 查看 NAND 设备 MTD 分区3.1.3 查看 NAND 设备坏块 3.2 NAND 擦除操作3.3 NAND 写操作3.4 NAND 读操作3.5 其它 NAND 操作 1. 前言 限于作者能力水平&#xff0c;本…...

史上最全的大数据开发八股文【自己的吐血总结】

自我介绍 我本硕都是双非计算机专业&#xff0c;从研一下开始学习大数据开发的相关知识&#xff0c;从找实习到秋招&#xff0c;我投递过100公司&#xff0c;拿到过10的offer&#xff0c;包括滴滴、字节、蚂蚁、携程、蔚来、去哪儿等大厂&#xff08;岗位都是大数据开发&#…...

数据库学习案例20240304-mysql数据库案例总结(碎片,统计信息)

1 表中的碎片 在InnoDB中删除行的时候&#xff0c;这些行只是被标记为“已删除”&#xff0c;而不是真正从物理存储上进行了删除&#xff0c;因而存储空间也没有真正被释放回收。InnoDB的Purge线程会异步地来清理这些没用的索引键和行。但是依然没有把这些释放出来的空间还给操…...

【小白友好】LeetCode 删除并获得点数

基础题 打家劫舍https://leetcode.cn/problems/house-robber/ 小白解法 删除nums[i]就会使得所有nums[i]-1和nums[i]1的值都消失&#xff0c;手写了几个&#xff0c;发现找来找去不方便&#xff0c;还不如先排个序&#xff0c;然后这样nums[i]-1和nums[i]和nums[i]1就能靠在…...

c#委托、lambda、事件

Lambda Lambda表达式是一种匿名函数&#xff0c;Lambda表达式通常以箭头“>”分隔左侧的输入和右侧的输出。 (parameter_list) > { statement_block } parameter_list 是由一个或多个参数组成的逗号分隔列表&#xff0c;每个参数都包括类型和名称&#xff0c;可以为空。…...

每日一练——9×9乘法表

#include<stdio.h>int main() {int i 0; //乘数定义for (i 1; i < 9; i) //循环1到9 {int j 0;//被乘数定义for (j 1; j < i; j) //循环被乘数1到9{printf("%d*%d%2d ", i, j, i * j); 乘法}printf("\n"); 换行} return 0; }...

大白话解析LevelDB:ShardedLRUCache

文章目录 Cache 接口定义ShardedLRUCache 的实现ShardedLRUCache 的构造函数ShardedLRUCache::Insert(const Slice& key, void* value, size_t charge, void (\*deleter)(const Slice& key, void* value))ShardedLRUCache::Lookup(const Slice& key)ShardedLRUCach…...

GDOI2024游记

Day0 中午一点钟从学校出发去东莞&#xff0c;大概坐了一个多小时车&#xff0c;两点半多到酒店。住的八方精选酒店&#xff08;ljh说他们住九方精选酒店&#xff0c;乐&#xff09;&#xff0c;说的是景区酒店&#xff0c;但打开外窗&#xff0c;近处是简陋的阳台&#xff0c…...

clawPDF脚本自动化:如何用Python和PowerShell批量处理PDF文档的终极指南

clawPDF脚本自动化&#xff1a;如何用Python和PowerShell批量处理PDF文档的终极指南 【免费下载链接】clawPDF Open Source Virtual (Network) Printer for Windows that allows you to create PDFs, OCR text, and print images, with advanced features usually available on…...

7天职场内耗清零打卡计划

7天职场内耗清零打卡计划&#xff08;极简好坚持&#xff09;每天 3 件小事&#xff0c;不累不费脑&#xff0c;7 天稳住心态第一天&#xff1a;断胡思乱想别人随口一句话&#xff0c;当场听完就翻篇&#xff0c;绝不反复琢磨上班只盯自己手头事&#xff0c;不偷看别人忙不忙、…...

3分钟终极指南:用trackerslist让你的BT下载速度提升5倍

3分钟终极指南&#xff1a;用trackerslist让你的BT下载速度提升5倍 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 还在为BT下载速度慢而烦恼吗&#xff1f;trackerslist项…...

闲鱼客户端三重动态签名机制解析:x-sign、x-mini-wua与x-umt

1. 这不是“爬虫教程”&#xff0c;而是一次对闲鱼客户端通信机制的解剖式复盘你有没有遇到过这样的情况&#xff1a;用 Python 写了个闲鱼商品监控脚本&#xff0c;本地跑得好好的&#xff0c;一上服务器就频繁 403&#xff1b;或者用 Postman 模拟请求&#xff0c;Headers 里…...

Cortex-Debug架构深度解析:从GDB MI协议到VSCode调试体验的完整实现

Cortex-Debug架构深度解析&#xff1a;从GDB MI协议到VSCode调试体验的完整实现 【免费下载链接】cortex-debug Visual Studio Code extension for enhancing debug capabilities for Cortex-M Microcontrollers 项目地址: https://gitcode.com/gh_mirrors/co/cortex-debug …...

欧姆龙G9SP安全控制系统中,如何通过NB触摸屏实现远程复位与状态监控?

欧姆龙G9SP安全控制系统与NB触摸屏的深度集成&#xff1a;远程复位与状态监控实战指南 在工业自动化领域&#xff0c;安全控制系统的可靠性与操作便捷性同样重要。欧姆龙G9SP作为专业的安全控制器&#xff0c;与NB系列触摸屏的协同工作&#xff0c;能够为生产线提供既安全又高…...

AI智能体开发(二):技术栈选择与工具集成

主流开发框架深度对比 在上一篇中我们了解了Agent的核心架构,现在让我们看看如何用代码实现这些架构组件。目前市面上有多个成熟的Agent开发框架,每个都有其独特的优势和适用场景。 LangChain 定位:最全面的LLM应用开发框架 核心优势: 生态系统最完善 - 支持100+ LLM提…...

Hitboxer SOCD Cleaner:键盘输入仲裁系统的底层实现与技术架构分析

Hitboxer SOCD Cleaner&#xff1a;键盘输入仲裁系统的底层实现与技术架构分析 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在竞技游戏领域&#xff0c;键盘输入精度直接影响玩家操作表现。传统键盘在处理同…...

如何选择最适合的许可证扫描工具:LicenseFinder与其他工具的全面对比分析

如何选择最适合的许可证扫描工具&#xff1a;LicenseFinder与其他工具的全面对比分析 【免费下载链接】LicenseFinder Find licenses for your projects dependencies. 项目地址: https://gitcode.com/gh_mirrors/li/LicenseFinder 在当今开源软件盛行的时代&#xff0c…...

如何用AntiMicroX解决PC游戏手柄兼容性问题:终极手柄映射工具完全指南

如何用AntiMicroX解决PC游戏手柄兼容性问题&#xff1a;终极手柄映射工具完全指南 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gi…...