hiho刷题日记——第十九天RMQ问题再临-线段树

分布式爬虫架构实战:Scrapy+RabbitMQ+浏览器池,百万级数据抓取成本直降60%(附架构图+源码) 任务调度瓶颈:Redis 作为消息队列,不支持复杂任务优先级,高并发下容易消息堆积,且单点故障会导致全量任务丢失;资源浪费严重:每个爬虫节点每次爬取动态页面都启动新浏览器,启动耗时3-5秒,CPU 占用率高达80%+,单机最多同时跑3个浏览器;扩展性差:新增节点需要手动同步任务队列,节点忙闲不均,无法根据任务量动态分配资源。# 从settings读取RabbitMQ配置# 注册信号:爬虫关闭时关闭RabbitMQ连接"""启动时建立RabbitMQ连接""" 阅读详情

题目

RMQ问题就是在一个范围内求最值的问题。
这个题目还增加了中途可以改变某个值的大小。
这里是利用线段树求最小值。

思路

线段树其实有二分的思想在里面。比如我知道第1-8个分别的数值。然后我就可以求出1-2,3-4,5-6,7-8的最值,然后求出1-4,5-8的最值,最后求出1-8的最值。以1-8为树根可以建立一棵二叉树。然后在知道范围的时候,可以把要求的范围分解成已经求出的范围最值来更快的得到答案。

中途出现的错误

void setw(int n,int weight) 
{   
    w[n]=weight;
    n>>=1;
    while(n && weight<w[n])
    {
        w[n]=weight;
        n>>=1;
    }   
}

在这里我只考虑到了改变的值变小了。没有考虑到改变的值变大的情况。

代码

#include<cstdio> 
#define min(a,b) (a<b?a:b)
using namespace std;
const int MAXW=2097152+5;
int w[MAXW],N;

void setw(int n,int weight) 
{   
    w[n]=weight;
    n>>=1;
    while(n)
    {
        w[n]=min(w[n<<1],w[(n<<1)|1]);
        n>>=1;
    }   
}

void quew(int l,int r)
{
    int ans=MAXW;
    while(l<=r)
    {
        if(l==r)
        {
            ans=min(ans,w[l]);
            break;
        }
        if(l&1)
        {
            ans=min(ans,w[l]);
            l++;
        }
        if(!(r&1))
        {
            ans=min(ans,w[r]);
            r--;
        }
        l>>=1;r>>=1;
    }
    printf("%d\n",ans);
}

int main()
{
    scanf("%d",&N);
    int t=1;
    for(;t<N;t<<=1);
    for(int i=0;i<N;i++) scanf("%d",&w[i+t]);
    for(int i=t,n=N;i;i>>=1,n>>=1)
    {
        for(int j=0;j<n-1;j+=2)
            w[(i+j)>>1]=  min(w[i+j],w[i+j+1]);
        if(n%2) 
        {
            w[(i+n)>>1]=w[i+n-1];
            n++;
        }
    }
    scanf("%d",&N);
    int o,a,b;
    while(N--)
    {
        scanf("%d%d%d",&o,&a,&b);
        if(o) setw(t+a-1,b);
        else quew(a+t-1,b+t-1);
    }

    return 0;
}
RT-DETR升级:TGRS2026 CKConv结合RepC3 | 方向特征与跨阶段融合协同,小目标漏检率大幅下降 小目标鲁棒性提升:CKConv方向选择性抑制背景噪声,RepC3跨阶段传递保留深层微弱热信号,显著改善低对比度、低信噪比场景下的检测精度。 阅读详情

相关推荐

SeedVR2插件双版本共存实战:手把手教你创建幽灵节点解决ComfyUI兼容问题

本文详细介绍了解决ComfyUI中SeedVR2插件新旧版本兼容问题的实战方案。通过目录隔离实现双版本共存,并手把手教你创建‘幽灵节点’来模拟缺失的SeedVR2ExtraArgs节点,从而让旧工作流得以正常运行,同时享受新版本的功能与性能。

red88的博客 1407

hihoCoder #1077 RMQ问题再临-线段树

#1077 : RMQ问题再临-线段树 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并且依次标号为1到N,每次小Hi都给出一段区间[L, R],小Ho要做的是选出标号在这个区间内的所有商品...

weixin_30555753的博客 171

HTTPDebugger实战:iTunes登录协议抓包与签名验证全解析

HTTPS抓包是分析客户端与服务端交互的重要手段,其原理是通过中间人证书解密TLS流量,从而观察请求与响应细节。在调试iTunes登录协议时,抓包能帮助我们定位签名验证失败、x-timestamp过期等棘手问题。然而,许多教程中常见的mumu模拟器抓包、fiddler手机抓包或charles抓包unknown问题,往往让新手陷入工具陷阱。本文以HTTPDebugger为切入点,从TLS握手到认证请求,系统拆解iTunes登录协议的关键字段与签名机制,覆盖证书配置、进程监听、域名过滤等实战经验,辅以Apple

weixin_30768881的博客 195

hihoCoder 1077 RMQ问题再临-线段树

今天把这题一做,才知道以前很多地方都用错了,杭电的数据也太水了,今天算是大彻大悟了。 #include #include #include #define N 1000005 using namespace std; int n,m; int a[N]; struct node{ int l,r,mid,minn; }tree[N<<2]; void build(int m,i

piaocoder 577

STM32 烧录报错Invalid ROM Table

STM32 烧录报错Invalid ROM Table

热爱科技,物联,程序开发等 1732

SOPHGO SG2000/SG2002 AI SoC异构架构解析与应用

异构计算架构通过整合不同指令集核心(如RISC-V、Arm和8051)实现性能与功耗的平衡,是现代嵌入式系统和AIoT设备的关键技术。其原理是根据任务特性分配至最适合的计算单元,例如通用计算使用高性能核心,实时任务交由专用核心处理。这种架构在智能视觉、工业检测等场景具有显著优势,能高效处理AI推理、多媒体编解码等任务。SOPHGO SG2000系列SoC采用创新的三核异构设计,集成了0.5-1TOPS的NPU加速器,支持Linux/Android/FreeRTOS多系统并行运行。开发中需注意核心间的IPC通

weixin_30684743的博客 353

#bzoj3186#单点修改的RMQ问题(zkw线段树版)

单点修改的RMQ问题 时间限制: 1 Sec  内存限制: 128 MB 题目描述 给出N(1 ≤ N ≤ 50,000)个数的序列A,下标从1到N,每个元素值均不超过INT_MAX。有两种操作: (1)  Q i j:询问区间[i, j]之间的最大值与最小值的差值 (2) C i j:将A[i]增加j,j是一个整数。如果多次对同一个元素进行C操作,导致溢出,保留

ElaineZXY的博客 578

使用 Python 爬取网易云音乐歌单数据(完整教程)

随着在线音乐平台的普及,网易云音乐(NetEase Cloud Music)凭借其个性化的推荐算法和丰富的用户互动,吸引了大量用户。网易云音乐的歌单中包含了丰富的音乐数据,包括歌曲名、歌手、专辑、播放量、评论数等信息。通过爬取这些数据,可以对音乐流行趋势进行分析,挖掘音乐推荐策略,甚至训练个性化推荐模型。网易云音乐的 API 并未官方开放,但开发者通过抓包和逆向分析,找到了若干可用接口。✅ 数据清洗与存储(CSV/数据库)✅ 网易云音乐 API 接口分析。✅ 网易云音乐接口解析。✅ 同步与异步爬取实现。

2201_76125261的博客 1372

数据结构之线段树(点修改)

首先,明确一点,线段树并不是什么神奇的东西,只是巧妙地利用了分治的思想,它用于区间的动态查询问题~ 线段树由很多下面这样的单元组合起来的(我懒地画图了),其中M=L+(R-L)/2(当然也可以写成(L+R)/2,但我们应该养成用前面那种方式找中值的习惯,当L和R特别大的时候,L+R有可能溢出,不过线段树上一般没什么问题),使用线段树的前提是你求的东西必须满足区间加法 顺便提一下...

阿飝的博客 434

地统计插值学习心得(一)

(创建地统计图层工具用于根据现有的地统计图层或者地统计模型来创建包含新要素数据集的地统计图层,也就是使用构建好的地统计模型用到新的数据集中)这表明,远离极值的区域预测不受极值的影响,并且还表明,包括极值会导致钼元素浓度高的区域周围的预测明显变高。通常,我们使用同一个数据集进行建模和预测,但是在实际插值过程中,这两步的数据可以是不同的,这就是处理极值的诀窍。如果你的数据集有无法忽略的极值时(比如这些钼元素浓度),一种常见的方法是首先显式移除极值进行建模,然后在预测中使用整个数据集(包括极值)。

JData_Engineer的博客 286

Linux 下安装 openjdk 17【详细步骤】

JDK17,安装教程。

甘蓝的专栏 7503

线段树RMQ

水 #include #include #define maxn 1000002 #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1 | 1 int T[maxn << 2]; int min(int a, int b) { return a < b ? a : b; } void pushUp(

长风的专栏 1206

多后端系统统一聚合与智能分流:用 Multi Origin Composition 与 Routing 打造一套可扩展的 SAP Gateway 架构

本文针对企业级SAP集成场景,详细介绍了如何利用SAP Gateway的MOC(多源组合)和Routing功能实现多后端系统的智能路由与数据聚合。通过系统别名配置、用户角色绑定和主机名分流等机制,可实现按用户、按域名的精确路由。文章还提供了配置清单、性能优化建议和常见问题解决方案,帮助工程师落地多后端OData服务的最佳实践。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 186

HDU-1394 zkw线段树 逆序数

Problem Description The inversion number of a given number sequence a1, a2, …, an is the number of pairs (ai, aj) that satisfy i &amp;amp;lt; j and ai &amp;amp;gt; aj. For a given sequence of numbers a1, a2, …, an, i...

刷题记录 237

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HIHO #1077 : RMQ问题再临-线段树

题目链接 线段树入门,单点修改,区间查询 线段树的空间一般开题目数据范围4倍 #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<string> #include<cmath> #include<queue> #include<map> #include<set> #include<

qwesde 562

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

POJ.3264.Balanced Lineup(线段树 或 RMQ)

D - Balanced LineupTime Limit: 5000 MS Memory Limit: 0 KB64-bit integer IO format: %I64d , %I64u Java class name: Main[Submit] [Status]DescriptionFor the daily milking, Farmer John's N cows (1 ≤ N ≤ 5...

红鲤鱼与绿鲤鱼与驴 258

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【模板】RMQ(区间查询极值)

/*#include <iostream> #include <cstring> #include <iomanip> #include <algorithm> #include <queue> #include <stack> #include <vector> #include <set> #in...

Whyckck的博客 273

hiho一下 第十九周 RMQ问题再临-线段树

相比于之前的题目,数据量扩大为10^6,因此使用线段树来实现 有关线段树的详细分析 用链表的方式实现 #include #define MAX_N 1000000 #define MAX_NODE 2000000 //一个二叉树有N个叶子节点,则总的节点数为2N-1 typedef struct NODE{ struct NODE *left, *right, *father; i

ZzebraA的博客 529

线段树水题 #1077 : RMQ问题再临-线段树

#include #include #include #include #include using namespace std; #define maxn 1000000 + 10 #define Lson L, mid, root<<1 #define Rson mid+1, R, root<<1|1 #define INF 0x7ffffff int Min[maxn<<2],

Dikea's Blog 1058

RMQ(快速查询区间最值)

#include #include #include #include #include #define ll long long using namespace std; const int maxn=5e4+10; int maxnum[maxn][20]; int minnum[maxn][20]; void RMQ(int num) { for(int j=1;j<20;

妍恐龙的博客....^~^眼熟我 383

RMQ 区间最值的问题

int RMQ(int L, int R) { int k = 0; while((1<<(k+1)) <= R-L+1) k++; //如果2^k+1 <= R-L+1,那么k还可以加1 return min(d[L][k], d[R-(1<<k)+1][k]); }

小小西北风 573

hiho刷题日记——第三十一天小Hi小Ho的惊天大作战:扫雷·二

题目这次的扫雷是二维的了。根据三种规则做一次判断,判断出一定是雷和一定不是雷的数量。 1.如果某一个被探明的格子里所标的数字为0,那么它相邻的8个格子里的未探明格子被认作是一定不是地雷的格子。 2.如果某一个被探明的格子里所标的数字为K,且它相邻的8个格子里正好有K个没有探明的格子的话,则这K个没有探明的格子被认作是一定是地雷的格子。 3.如果某两个探明了的格子A和B,他们中标明的数字分别为P

AngcFun的博客 1530

hiho刷题日记——第三十天小Hi小Ho的惊天大作战:扫雷·一

题目简化版扫雷,只有一行。 给出一行的周围3格中是雷的数量。 判断哪些一定是雷,一定不是雷。 思路因为给出的信息是环环相扣的,不用一个一个去试。 只需要试第一格是否为雷就可以通过数据算出后面是否为雷。 所以只用试两次, 第一次把一格设为雷,算出后面的情况;第二次把第一格设为不是雷,算出后面的情况。 若两次都算出来了,则将两次的情况对比,没有变化的部分就是答案。 若只有一次满足条件,则

AngcFun的博客 1234

hiho刷题日记——第十二天刷油漆

题目一共N个结点的树(1至N编号),油漆能够涂M个结点。 将包含1号结点的一部分连通的结点进行涂漆(这里的连通指的是这一些涂漆的结点可以互相到达并且不会经过没有涂漆的结点),然后将剩下的结点拆掉!那么究竟选择哪些结点进行涂漆呢?小Ho想了想给每个结点都评上了分——他希望最后留下来,也就是涂漆了的那些结点的评分之和可以尽可能的高!输入每个测试点(输入文件)有且仅有一组测试数据。 每组测试数据的第一

AngcFun的博客 1014

hiho刷题日记——第九天状态压缩·二

hiho刷题日记——第九天天状态压缩·二题目小Hi和小Ho领到了一个大小为N*M的长方形盘子,他们可以用这个盒子来装一些大小为2*1的蛋糕。但是根据要求,他们一定要将这个盘子装的满满的,一点缝隙也不能留下来,才能够将这些蛋糕带走。这么简单的问题自然难不倒小Hi和小Ho,于是他们很快的就拿着蛋糕离开了~但小Ho却不只满足于此,于是他提出了一个问题——他们有多少种方案来装满这个N*M的盘子呢?代码#in

AngcFun的博客 971

hiho刷题日记——第十六天RMQ-ST算法

这两天有事停了两天。这道题也是调了不少时间。好累呀。真想就直接贴代码。ST定义ST[Len][L]表示左边界为L,长度为2^Len的区间中的最小值。则有 ST[Len][L]=min(ST[Len-1][L],ST[Len-1][L+2^(Len-1)]; 然后就可以循环求出所有的ST。答案取小于这个区间长度的最大的2的非负整数次幂T,则答案为min(ST[Len][L],ST[Len][R+1

AngcFun的博客 888
上一篇: hiho刷题日记——第十八天RMQ问题再临
下一篇: hiho刷题日记——第二十天线段树的区间修改
昂村饭
博客等级 码龄12年 5粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值