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

吉如一线段树:区间最值和历史最值

区间最值和历史最值

问题一

给定一个长度为 n n n 的数组 a a a , 实现以下三种操作 :

0 l r x : 将 a r r [ l ∼ r ] arr[l\sim r] arr[lr] 范围的每个数 v v v , 更新为 min ⁡ ( v , x ) \min (v, x) min(v,x)

1 l r : 查询 max ⁡ i = l r a r r i \max_{i=l}^r arr_i maxi=lrarri

2 l r : 查询 ∑ i = l r a r r i \sum_{i=l}^rarr_i i=lrarri

吉如一线段树。

#include<bits/stdc++.h>
using namespace std;
#define int long long#define lc u << 1
#define rc u << 1 | 1int const N = 5e5 + 10;struct node{// mx : 最大值 ; cnt : mx 出现次数// se : 第二大// sum : 区间和int l, r, mx, cnt, se, sum;
}tr[N << 2];int a[N];void pushup(int u){tr[u].sum = tr[lc].sum + tr[rc].sum;tr[u].mx = max(tr[lc].mx, tr[rc].mx);if(tr[lc].mx == tr[rc].mx){tr[u].cnt = tr[lc].cnt + tr[rc].cnt;tr[u].se = max(tr[lc].se, tr[rc].se);}else if(tr[lc].mx > tr[rc].mx){tr[u].cnt = tr[lc].cnt;tr[u].se = max(tr[lc].se, tr[rc].mx);}else{tr[u].cnt = tr[rc].cnt;tr[u].se = max(tr[lc].mx, tr[rc].se);}
}void pushdown(int u){if(tr[lc].mx > tr[u].mx){ // 标记回收tr[lc].sum -= (tr[lc].mx - tr[u].mx) * tr[lc].cnt;tr[lc].mx = tr[u].mx;}if(tr[rc].mx > tr[u].mx){ // 标记回收tr[rc].sum -= (tr[rc].mx - tr[u].mx) * tr[rc].cnt;tr[rc].mx = tr[u].mx;}
}void build(int u, int l, int r){tr[u] = {l, r, a[l], 1, LLONG_MIN, a[l]};if(l == r) return ;int mid = l + r >> 1;build(lc, l, mid);build(rc, mid + 1, r);pushup(u);
}void setMin(int u, int l, int r, int x){if(x >= tr[u].mx) return ;if(l <= tr[u].l && r >= tr[u].r && x > tr[u].se){tr[u].sum -= (tr[u].mx - x) * tr[u].cnt;tr[u].mx = x;return ;}pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if(l <= mid) setMin(lc, l, r, x);if(r > mid) setMin(rc, l, r, x);pushup(u);
}int askMax(int u, int l, int r){if(l <= tr[u].l && r >= tr[u].r){return tr[u].mx;}int mid = tr[u].l + tr[u].r >> 1;pushdown(u);int res = LLONG_MIN;if(l <= mid) res = max(res, askMax(lc, l, r));if(r > mid) res = max(res, askMax(rc, l, r));return res;
}int askSum(int u, int l, int r){if(l <= tr[u].l && r >= tr[u].r){return tr[u].sum;}int mid = tr[u].l + tr[u].r >> 1;pushdown(u);int sum = 0;if(l <= mid) sum += askSum(lc, l, r);if(r > mid) sum += askSum(rc, l, r);return sum;
}void solve(){int n, q;cin >> n >> q;for(int i = 1; i <= n; i ++){cin >> a[i];}build(1, 1, n);while(q --){int op, l, r, t;cin >> op >> l >> r;if(op == 0){cin >> t;setMin(1, l, r, t);}else if(op == 1){cout << askMax(1, l, r) << '\n';}else{cout << askSum(1, l, r) << '\n';}}
}signed main(){ios::sync_with_stdio(false);cin.tie(0), cout.tie(0); int T;cin >> T;while(T --){solve();}return 0;
}

问题二

题目背景

本题是线段树维护区间最值操作与区间历史最值的模板。

题目描述

给出一个长度为 n n n 的数列 A A A,同时定义一个辅助数组 B B B B B B 开始与 A A A 完全相同。接下来进行了 m m m 次操作,操作有五种类型,按以下格式给出:

  • 1 l r k:对于所有的 i ∈ [ l , r ] i\in[l,r] i[l,r],将 A i A_i Ai 加上 k k k k k k 可以为负数)。
  • 2 l r v:对于所有的 i ∈ [ l , r ] i\in[l,r] i[l,r],将 A i A_i Ai 变成 min ⁡ ( A i , v ) \min(A_i,v) min(Ai,v)
  • 3 l r:求 ∑ i = l r A i \sum_{i=l}^{r}A_i i=lrAi
  • 4 l r:对于所有的 i ∈ [ l , r ] i\in[l,r] i[l,r],求 A i A_i Ai 的最大值。
  • 5 l r:对于所有的 i ∈ [ l , r ] i\in[l,r] i[l,r],求 B i B_i Bi 的最大值。

在每一次操作后,我们都进行一次更新,让 B i ← max ⁡ ( B i , A i ) B_i\gets\max(B_i,A_i) Bimax(Bi,Ai)

输入格式

第一行包含两个正整数 n , m n,m n,m,分别表示数列 A A A 的长度和操作次数。

第二行包含 n n n 个整数 A 1 , A 2 , ⋯ , A n A_1,A_2,\cdots,A_n A1,A2,,An,表示数列 A A A

接下来 m m m 行,每行行首有一个整数 o p op op,表示操作类型;接下来两个或三个整数表示操作参数,格式见【题目描述】。

输出格式

对于 o p ∈ { 3 , 4 , 5 } op\in\{3,4,5\} op{3,4,5} 的操作,输出一行包含一个整数,表示这个询问的答案。

样例 #1

样例输入 #1

5 6
1 2 3 4 5
3 2 5
1 1 3 3
4 2 4
2 3 4 1
5 1 5
3 1 4

样例输出 #1

14
6
6
11

提示

样例说明 #1
操作次数输入内容操作数列输出结果
0 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,5
13 2 5求出 [ 2 , 5 ] [2,5] [2,5] 所有数的和 1 , 2 , 3 , 4 , 5 1,2,3,4,5 1,2,3,4,514
21 1 3 3 [ 1 , 3 ] [1,3] [1,3] 内所有数加 3 3 3 4 , 5 , 6 , 4 , 5 4,5,6,4,5 4,5,6,4,5
34 2 4求出 [ 2 , 4 ] [2,4] [2,4] 所有数的最大值 4 , 5 , 6 , 4 , 5 4,5,6,4,5 4,5,6,4,56
42 3 4 1 [ 3 , 4 ] [3,4] [3,4] 所有数与 1 1 1 取最小值 4 , 5 , 1 , 1 , 5 4,5,1,1,5 4,5,1,1,5
55 1 5求出 [ 1 , 5 ] [1,5] [1,5] 所有位置历史最大值的最大值 4 , 5 , 1 , 1 , 5 4,5,1,1,5 4,5,1,1,56
63 1 4求出 [ 1 , 4 ] [1,4] [1,4] 所有数的和 4 , 5 , 1 , 1 , 5 4,5,1,1,5 4,5,1,1,511
数据规模与约定
  • 对于测试点 1 , 2 1,2 1,2,满足 n , m ≤ 5000 n,m\leq 5000 n,m5000
  • 对于测试点 3 , 4 3,4 3,4,满足 o p ∈ { 1 , 2 , 3 , 4 } op\in\{1,2,3,4\} op{1,2,3,4}
  • 对于测试点 5 , 6 5,6 5,6,满足 o p ∈ { 1 , 3 , 4 , 5 } op\in\{1,3,4,5\} op{1,3,4,5}
  • 对于全部测试数据,保证 1 ≤ n , m ≤ 5 × 1 0 5 1\leq n,m\leq 5\times 10^5 1n,m5×105 − 5 × 1 0 8 ≤ A i ≤ 5 × 1 0 8 -5\times10^8\leq A_i\leq 5\times10^8 5×108Ai5×108 o p ∈ [ 1 , 5 ] op\in[1,5] op[1,5] 1 ≤ l ≤ r ≤ n 1 \leq l\leq r \leq n 1lrn − 2000 ≤ k ≤ 2000 -2000\leq k\leq 2000 2000k2000 − 5 × 1 0 8 ≤ v ≤ 5 × 1 0 8 -5\times10^8\leq v\leq 5\times10^8 5×108v5×108
提示

本题输入量较大,请使用合理高效的读入方法。

#include<bits/stdc++.h>
using namespace std;
#define int long long#define lc u << 1
#define rc u << 1 | 1int const N = 5e5 + 10;struct node{// mx : 最大值 ; cnt : mx 出现次数// se : 第二大// sum : 区间和// mxhis : 历史最大值// add1, add2 : 区间最大值/非最大的懒标记// add3, add4 : 最大值懒标记历史最大值, 非最大值懒标记最历史大值int l, r, mx, cnt, se, sum, mxhis;int add1, add2, add3, add4;
}tr[N << 2];int a[N];void pushup(int u){tr[u].sum = tr[lc].sum + tr[rc].sum;tr[u].mx = max(tr[lc].mx, tr[rc].mx);tr[u].mxhis = max(tr[lc].mxhis, tr[rc].mxhis);if(tr[lc].mx == tr[rc].mx){tr[u].cnt = tr[lc].cnt + tr[rc].cnt;tr[u].se = max(tr[lc].se, tr[rc].se);}else if(tr[lc].mx > tr[rc].mx){tr[u].cnt = tr[lc].cnt;tr[u].se = max(tr[lc].se, tr[rc].mx);}else{tr[u].cnt = tr[rc].cnt;tr[u].se = max(tr[lc].mx, tr[rc].se);}
}void down(int u, int add1, int add2, int add3, int add4){tr[u].sum += add1 * tr[u].cnt + add2 * (tr[u].r - tr[u].l + 1 - tr[u].cnt);tr[u].mxhis = max(tr[u].mxhis, tr[u].mx + add3);tr[u].mx += add1;if(tr[u].se != LLONG_MIN) tr[u].se += add2;tr[u].add3 = max(tr[u].add3, tr[u].add1 + add3);tr[u].add4 = max(tr[u].add4, tr[u].add2 + add4);tr[u].add1 += add1;tr[u].add2 += add2;
}void pushdown(int u){int maxn = max(tr[lc].mx, tr[rc].mx);if(tr[lc].mx == maxn){down(lc, tr[u].add1, tr[u].add2, tr[u].add3, tr[u].add4);}else{down(lc, tr[u].add2, tr[u].add2, tr[u].add4, tr[u].add4);}if(tr[rc].mx == maxn){down(rc, tr[u].add1, tr[u].add2, tr[u].add3, tr[u].add4);}else{down(rc, tr[u].add2, tr[u].add2, tr[u].add4, tr[u].add4);}tr[u].add1 = tr[u].add2 = tr[u].add3 = tr[u].add4 = 0;
}void build(int u, int l, int r){tr[u] = {l, r, a[l], 1, LLONG_MIN, a[l], a[l], 0, 0, 0, 0};if(l == r) return ;int mid = l + r >> 1;build(lc, l, mid);build(rc, mid + 1, r);pushup(u);
}void segAdd(int u, int l, int r, int x){if(l <= tr[u].l && r >= tr[u].r){tr[u].sum += x * (tr[u].r - tr[u].l + 1);tr[u].mx += x;tr[u].mxhis = max(tr[u].mx, tr[u].mxhis);if(tr[u].se != LLONG_MIN) tr[u].se += x;tr[u].add1 += x, tr[u].add2 += x;tr[u].add3 = max(tr[u].add3, tr[u].add1);tr[u].add4 = max(tr[u].add4, tr[u].add2);return ;}int mid = tr[u].l + tr[u].r >> 1;pushdown(u);if(l <= mid) segAdd(lc, l, r, x);if(r > mid) segAdd(rc, l, r, x);pushup(u);
}void setMin(int u, int l, int r, int x){if(x >= tr[u].mx) return ;if(l <= tr[u].l && r >= tr[u].r && x > tr[u].se){int t = tr[u].mx - x;tr[u].sum -= t * tr[u].cnt;tr[u].mx = x;tr[u].add1 -= t;return ;}pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if(l <= mid) setMin(lc, l, r, x);if(r > mid) setMin(rc, l, r, x);pushup(u);
}int askMax(int u, int l, int r){if(l <= tr[u].l && r >= tr[u].r){return tr[u].mx;}int mid = tr[u].l + tr[u].r >> 1;pushdown(u);int res = LLONG_MIN;if(l <= mid) res = max(res, askMax(lc, l, r));if(r > mid) res = max(res, askMax(rc, l, r));return res;
}int askMaxHis(int u, int l, int r){if(l <= tr[u].l && r >= tr[u].r){return tr[u].mxhis;}int mid = tr[u].l + tr[u].r >> 1;pushdown(u);int res = LLONG_MIN;if(l <= mid) res = max(res, askMaxHis(lc, l, r));if(r > mid) res = max(res, askMaxHis(rc, l, r));return res;
}int askSum(int u, int l, int r){if(l <= tr[u].l && r >= tr[u].r){return tr[u].sum;}int mid = tr[u].l + tr[u].r >> 1;pushdown(u);int sum = 0;if(l <= mid) sum += askSum(lc, l, r);if(r > mid) sum += askSum(rc, l, r);return sum;
}void solve(){int n, q;cin >> n >> q;for(int i = 1; i <= n; i ++){cin >> a[i];}build(1, 1, n);while(q --){int op, l, r, t;cin >> op >> l >> r;if(op == 1){cin >> t;segAdd(1, l, r, t);}else if(op == 2){cin >> t;setMin(1, l, r, t);}else if(op == 3){cout << askSum(1, l, r) << '\n';}else if(op == 4){cout << askMax(1, l, r) << '\n';}else{cout << askMaxHis(1, l, r) << '\n';}}
}signed main(){ios::sync_with_stdio(false);cin.tie(0), cout.tie(0); int T = 1;while(T --){solve();}return 0;
}

相关文章:

吉如一线段树:区间最值和历史最值

区间最值和历史最值 问题一 给定一个长度为 n n n 的数组 a a a , 实现以下三种操作 : 0 l r x : 将 a r r [ l ∼ r ] arr[l\sim r] arr[l∼r] 范围的每个数 v v v , 更新为 min ⁡ ( v , x ) \min (v, x) min(v,x) 1 l r : 查询 max ⁡ i l r a r r i \max_{il}^r ar…...

数据库常见的安全特性有哪些

数据库的安全特性主要包括以下几个方面&#xff0c;以确保数据的机密性、完整性和可用性&#xff1a; 1. 身份验证&#xff08;Authentication&#xff09; 数据库系统会通过身份验证来确定用户的身份&#xff0c;常见的方式有用户名/密码验证、基于证书的验证、多因素验证&a…...

Debezium日常分享系列之:Debezium 3.0.0.Final发布

Debezium日常分享系列之&#xff1a;Debezium 3.0.0.Final发布 Debezium 核心的变化需要 Java 17基于Kafka 3.8 构建废弃的增量信号字段的删除每个表的详细指标 MariaDB连接器的更改版本 11.4.3 支持 MongoDB连接器的更改MongoDB sink connector MySQL连接器的改变MySQL 9MySQL…...

MVCC(多版本并发控制)

目录 1.MVCC的工作原理2.MVCC的优点3.例子 MVCC&#xff08;多版本并发控制&#xff09;是一种用于数据库管理系统中实现并发控制的技术。它允许多个事务同时对数据库进行读写操作&#xff0c;而不会相互干扰&#xff0c;从而提高数据库系统的性能和可用性。MVCC通过为每个事务…...

低代码可视化-uniapp响应式数据data-代码生成器

在uniapp框架中&#xff0c;data 是一个核心的概念&#xff0c;它代表了组件或uniapp实例中的响应式数据。这些数据是组件状态的基础&#xff0c;uniapp会根据这些数据的变化来更新DOM&#xff0c;从而保持视图与数据的同步。 data 的特点 响应式&#xff1a;uniapp使用一种称…...

10.7学习

1.安全认证 ●Session 认证中最常用的一种方式&#xff0c;也是最简单的。存在多节点session丢失的情况&#xff0c;可通过nginx粘性Cookie和Redis集中式Session存储解决 ●HTTP Basic Authentication 服务端针对请求头中base64加密的Authorization 和用户名和密码进行校验。…...

基础算法之前缀和--Java实现(下)--LeetCode题解:-和为 K 的子数组 - 和可被 K 整除的子数组 -连续数组-矩阵区域和

这里是Themberfue 和为 K 的子数组 题目解析 返回子数组中所有元素的和等于给定k的个数。 算法讲解 这题好像是用滑动窗口解决&#xff0c;但其实不能&#xff0c;因为 nums 中的元素可能存在负数&#xff0c;就不能保证其单调性的性质。 用前缀和求也不易想到&#xff0c;…...

序列化与反序列化基础及反序列化漏洞(附案例)

参考文章&#xff1a; [web安全原理]PHP反序列化漏洞 - 笑花大王 - 博客园 (cnblogs.com) 一、概念 为了能有效的存储数据而不丢失数据的类型和内容&#xff0c;经常需要通过序列化对数据进行处理&#xff0c;将数据进行序列化后&#xff0c;会生成一个字符串&#xff0c;字符…...

Khronos:动态环境下时空度量语义SLAM的统一方法

Khronos: A Unified Approach for Spatio-Temporal Metric-Semantic SLAM in Dynamic Environments 原文 项目 引言&#xff1a; 人类居住环境通常是高度动态的&#xff0c;人、机器人和其他实体不断移动、互动和改变场景。对于机器人在这种情况下的操作&#xff0c;仅仅建立一…...

一个迷茫的25岁前端程序员的自述

作者&#xff1a;一尾流莺 一直听说程序员的危机在 35 岁&#xff0c;没想到我的危机从 25 岁就开始了。 我甚至不知道自己是不是 25 岁&#xff0c;也可能是 26 岁&#xff0c;或者 27 岁&#xff0c;1998 年的生日&#xff0c;按照 2023 - 1998 的算法就是 25&#xff0c;按…...

多文件并发多线程MD5工具(相对快速的MD5一批文件),适配自定义MD5 Hash I/O缓存。

自己写的多文件 MD5校验工具&#xff0c;一个文件开一个线程&#xff0c;有最大I/O 缓存设置&#xff0c;兼容读写MD5后缀文件。 共计91个文件&#xff0c;合计180G左右 12分钟左右&#xff0c;UI基本卡废&#xff0c;但程序没蹦&#xff0c;属于正常。 卡的原因是基本是用 I/O…...

Pikachu-url重定向-不安全的url跳转

不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能发生"跳错对象"的问题。 url跳转比较直接的危害是: …...

如何下载和安装CLion,图文详解

一、下载 登录JetBrains官网&#xff0c;下载最新版本的Clion&#xff0c;Clion目前没有社区版&#xff0c;都是专业版。 二、安装 1、启动Clion安装程序&#xff0c;下一步。 2、修改安装目录&#xff0c;下一步。 3、创建桌面快捷方式&#xff0c;更新PATH变量&#xff0…...

vue3导入本地图片2种实现方法

在<script setup>中使用import语法&#xff1a; <template><img :src"logo" alt"Logo"> </template><script setup> import logo from ./assets/logo.png; </script> 使用Vue的ref来动态地在<script setup>中…...

leetcode 刷题day36动态规划Part05 背包问题(完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯 (进阶))

完全背包 完全背包的每件商品都有无限个&#xff0c;和01背包的一不同主要体现在遍历顺序上。为了保证每个物品仅被添加一次&#xff0c;01背包内嵌的循环是从大到小遍历。而完全背包的物品是可以添加多次的&#xff0c;所以要从小到大去遍历。 518. 零钱兑换 II 思路&#…...

检查jar冲突,查找存在相同class的jar

写在前面 本文看下如何查找jar冲突&#xff0c;即查找哪些jar包中存在相同的class。如果是存在相同jar的不同版本&#xff0c;基本一眼就能看出来&#xff0c;然后结合maven的依赖关系将其剔除掉即可&#xff0c;但是当你遇到了有人手动拷贝某些class到jar包中导致冲突的情况时…...

PhpStudy-PHP5.4.45后门漏洞应用程序(C++/base64/winhttp)

PhpStudy-PHP5.4.45后门漏洞应用程序&#xff08;C/base64/winhttp&#xff09; 前言引言&#xff08;时间回到多年前&#xff09; PhpShellCmd.exe使用介绍&#xff1a;&#xff08;1&#xff09;输入网址检测是否存在PHP/5.4.45&#xff08;2&#xff09;whoami&#xff08;3…...

【优选算法】(第二十七篇)

目录 重排链表&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 合并K个升序链表&#xff08;hard&#xff09; 题目解析 讲解算法原理 编写代码 重排链表&#xff08;medium&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#xff08;LeetCod…...

学习Flask框架

Flask简介 Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug &#xff0c;模板引擎则使用 Jinja2 。Flask使用 BSD 授权。 Flask也被称为 “microframework” &#xff0c;因为它使用简单的核心&#xff0c;用 extension 增加其他功能。Flask没…...

Elasticsearch:使用 LLM 实现传统搜索自动化

作者&#xff1a;来自 Elastic Han Xiang Choong 这篇简短的文章是关于将结构化数据上传到 Elastic 索引&#xff0c;然后将纯英语查询转换为查询 DSL 语句&#xff0c;以使用特定过滤器和范围搜索特定条件。完整代码位于此 Github repo 中。 首先&#xff0c;运行以下命令安装…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...