CF515E Drazil and Park【思维+线段树】

MacOS M芯片部署ComfyUI:从环境排雷到插件生态一站式指南 本文为MacOS M系列芯片用户提供了一份详尽的ComfyUI部署指南。文章深入剖析了因架构差异导致的常见安装报错根源,并给出了基于MPS后端的正确PyTorch安装命令。从创建纯净Python虚拟环境、分步安装依赖,到验证GPU加速,手把手指导完成部署。同时,还推荐了包括管理器、汉化在内的必备插件,以完善使用生态,帮助用户一站式解决从环境搭建到效率提升的所有问题。 阅读详情

题意

有一只猴子,他生活在一个环形的公园里。有 nnn 棵树围绕着公园。第iii棵树和第i+1i+1i+1棵树之间的距离是 did_idi​ ,而第nnn棵树和第一棵树之间的距离是 dnd_ndn​ 。第iii棵树的高度是 hih_ihi​ 。

这只猴子每天要进行晨跑。晨跑的步骤如下:

· 他先选择两棵树;

· 然后爬上第一棵树;

· 再从第一棵树上下来,接着围绕着公园跑(有两个可能的方向)到第二棵树,然后爬上第二棵树;

· 最后从第二棵树上下来。

但是有一些小孩会在连续的一些树上玩耍。所以猴子不能经过这些树。

比如现在猴子选择的第xxx棵和第yyy棵树,那么该早晨他消耗的能量是 2(hx+hy)+dist(x,y)2(hx+hy)+dist(x,y)2(hx+hy)+dist(x,y) 。由于某一条路径是被小孩子占据的,所以他只能跑另外一条,因此 dist(x,y)dist(x,y)dist(x,y) 是确定的。

现在给出第i天,孩子们会在第 aia_iai​ 棵树和 bib_ibi​ 棵树之间玩耍。具体的,如果 ai≤biai≤biai≤bi ,那么孩子玩耍的区间就是 [ai,bi][ai,bi][ai,bi] ,否则孩子玩耍的区间就是 [ai,n]⋃[1,bi][ai,n]⋃[1,bi][ai,n]⋃[1,bi] 。

请帮助这只猴子找出两棵树,让他晨跑的时候他能够消耗最大的能量。

时间限制

2.00s

内存限制

500.00MB

思路

看到环形结构,第一个想法就是断环成链。
之后我们令,sumisum_isumi​表示从起点到iii的距离,也就是ddd数组的前缀和,那么2(hx+hy)+dist(x,y)=2hx+2hy+sumy−sumx=sumy+2hy−(sumx−2hx)2(hx+hy)+dist(x,y)=2hx+2hy+sum_y-sum_x=sum_y+2hy-(sum_x-2hx)2(hx+hy)+dist(x,y)=2hx+2hy+sumy​−sumx​=sumy​+2hy−(sumx​−2hx),那么如果我们可以求出sumi+2hisum_i+2hisumi​+2hi的最大值和sumi−2hisum_i-2hisumi​−2hi的最小值,就可以得到每次询问的答案。
可以使用线段树或者ST表维护这两个最值对应的下标,对于询问(l,r)(l,r)(l,r),如果两个最值的下标相同,为ppp,那么由于要求两颗不同的树,于是需要在(l,p−1)(l, p - 1)(l,p−1)与(p+1,r)(p + 1, r)(p+1,r)中再查询一下,具体看代码啦,很简单滴。

代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <set>
#include <vector>
#include <map>
#include <queue>
#include <cmath>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 100005;

int d[N * 2], h[N * 2];
LL s1[N * 2], s2[N * 2];

struct Tree
{
    int l, r;
    int mxp, mip;
}t[N << 4];

int calcMx(int i, int j)
{
    return s1[i] > s1[j] ? i : j;
}

int calcMi(int i, int j)
{
    return s2[i] < s2[j] ? i : j;
}

void push_up(int i)
{
    t[i].mip = calcMi(t[i << 1].mip, t[i << 1 | 1].mip);
    t[i].mxp = calcMx(t[i << 1].mxp, t[i << 1 | 1].mxp);
}

void build(int i, int l, int r)
{
    t[i].l = l, t[i].r = r;
    if (l == r)
    {
        t[i].mxp = t[i].mip = l;
        return;
    }
    int mid = (l + r) >> 1;
    build(i << 1, l, mid);
    build(i << 1 | 1, mid + 1, r);
    push_up(i);
}

int queryMi(int i, int l, int r)
{
    if (l <= t[i].l && t[i].r <= r) return t[i].mip;
    int mid = (t[i].l + t[i].r) >> 1;

    if (l > mid) return queryMi(i << 1 | 1, l, r);
    else if(r <= mid) return queryMi(i << 1, l, r);
    else return calcMi(queryMi(i << 1, l, r), queryMi(i << 1 | 1, l, r));
}

int queryMx(int i, int l, int r)
{
    if (l <= t[i].l && t[i].r <= r) return t[i].mxp;
    int mid = (t[i].l + t[i].r) >> 1;

    if (l > mid) return queryMx(i << 1 | 1, l, r);
    else if(r <= mid) return queryMx(i << 1, l, r);
    else return calcMx(queryMx(i << 1, l, r), queryMx(i << 1 | 1, l, r));
}

int getMx(int l, int r)
{
    if (l > r) return 0;
    return queryMx(1, l, r);
}

int getMi(int l, int r)
{
    if (l > r) return 0;
    return queryMi(1, l, r);
}

LL solve(int l, int r)
{
    int mxp = getMx(l, r), mip = getMi(l, r);
    if (mip != mxp) return s1[mxp] - s2[mip];
    int mxpp = calcMx(getMx(l, mxp - 1), getMx(mxp + 1, r));
    int mipp = calcMi(getMi(l, mxp - 1), getMi(mxp + 1, r));
    return max(s1[mxp] - s2[mipp], s1[mxpp] - s2[mip]);
}

int main()
{
    #ifdef ZYCMH
    freopen("1.in", "r", stdin);
    freopen("1.out", "w", stdout);
    #endif
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i ++ ) scanf("%d", &d[i % n + 1]), d[i % n + 1 + n] = d[i % n + 1];
    for (int i = 1; i <= n; i ++ ) scanf("%d", &h[i]), h[i + n] = h[i];

    LL sum = 0;
    s1[0] = -1e18;
    s2[0] = 1e18;
    for (int i = 1; i <= n * 2; i ++ )
    {
        sum += d[i];
        s1[i] = sum + 2 * h[i];
        s2[i] = sum - 2 * h[i];
    }

    build(1, 1, 2 * n);

    for (int i = 1; i <= m; i ++ )
    {
        int l, r;
        scanf("%d%d", &l, &r);
        if (l <= r) printf("%lld\n", solve(r + 1, l - 1 + n));
        else printf("%lld\n", solve(r + 1, l - 1));
    }

    return 0;
}

Calibre:LVS 快速debug short/open技巧 用Fix Suggestion和Short Isolate两种方法debug LVS问题 阅读详情

相关推荐

2025 年第十五届 APMCM 亚太地区大学生数学建模竞赛A题 农业灌溉系统优化

该摘要探讨了农业灌溉系统优化面临的复杂挑战,涉及智能灌溉技术的应用与资源配置问题。研究聚焦于一个1公顷的方形农场案例,该农场种植三种作物并面临动态环境条件(土壤类型、气象变化)。系统优化需平衡河流引水(非线性成本函数:C=50L^1.2+0.1Q^1.5)与储水罐灌溉(成本5元/升容积)两种方案,同时满足喷灌技术约束(喷头间距≥15米,覆盖半径15米)。关键矛盾体现在"平河旱储"的水资源调配策略与多作物需水量差异之间的协调,需通过传感器数据实时调整灌溉方案以实现效率最大化。(149字)

m0_60472361的博客 643

10.CF515E Drazil and Park 简单线段树

给定一个环,i-i+1i−i+1之间的距离给定,每个点有点权h_i 求这个最大值

HeartFireY的博客 256

Surface Pro 4/5/6/7保姆级黑苹果安装:从Windows分区到OC引导配置全流程(含EFI文件替换避坑)

本文详细介绍了在Surface Pro 4/5/6/7上安装黑苹果的全流程,包括Windows分区、OC引导配置和EFI文件替换等关键步骤。通过实战经验分享,帮助用户避开常见陷阱,实现Windows与macOS双系统完美共存,特别适合对黑苹果安装感兴趣的Surface Pro用户。

weixin_30300225的博客 1378

CF 515E, 线段树

题目大意:在一个环形上有n棵树,其中我们要在一段可行弧上找一个最大运动距离。运动距离是这样算的,我们在可行弧上找任意两棵不同的树,然后运动距离为两棵树的高和他们的距离。 解:裸线段树,可以观察运动距离等于 dist[j] - dist[i] + h[i] + h[j], 有max((dist[j] + h[j]) + (h[i] - dist[i]),线段树搞一下即可。 1 ...

weixin_30810583的博客 164

Android15 AndroidV冻结和解冻的场景

cgroup 最初由 Google 工程师 Paul Menage 和 Rohit Seth 在 2006 年提出,是一种细粒度资源控制的Linux内核机制。于 2007 年合并到 Linux 内核主线中。然而 Google 原生系统直到 Android 11 或更高版本上才支持 CACHE 应用的 CPU 冻结功能。当应用切换到后台并且没有其他活动时,系统会在一定时间内通过状态判断,将进程 ID 迁移到冻结的 cgroup 节点上,实现冻结 CACHE 应用。

苏法迪的专栏 1788

FPGA以太网开发实战:YT8511 PHY芯片MDIO接口配置全流程(附Verilog代码)

本文详细介绍了FPGA以太网开发中YT8511 PHY芯片MDIO接口的配置全流程,包括MDIO接口技术解析、Verilog状态机设计、核心代码实现细节及实战调试经验。通过提供经过验证的Verilog代码和优化策略,帮助开发者快速掌握以太网PHY芯片配置技术,提升通信系统性能。

weixin_29184371的博客 233

CF515E Drazil and Park

化简一下公式:2h[a]+2h[b]+dis(a,b)=2h[a]+2h[b]+d[b]-d[a-1](d数组是一个距离前缀和) 对于我们要求的一个区间,需要找的就是max((2h[b]+d[b])+(2h[a]-d[a-1])) 而对于这个max,需要再维护一个最大左前缀和一个最大右后缀 是不是和gss1很像 #include <bits/stdc++.h> #define int ...

Love_xyh的博客 259

linux入侵排查-综合日志分析

2.分析攻击者首次成功登录web管理后台的时间 还可以知道攻击者可能是通过10.2.4.11这个跳板服务器跳过来的,然后我们继续排查,可以发现日志中POST请求大多都是1047字节,然后往后大多是300字节,POST请求的响应状态码有200和302这两个,其中的302是爆破成功后持续爆破产生的日志,再1047字节和300字节中间夹着一个978字节,就是200响应和302响应的中间。7.分析攻击者留下的持久化后门的时间和后门执行情况 排查计划任务,发现有一个计划任务还是被加密的,应该是反弹shell的。

chinese_cabbage0的博客 644

题解 CF515E 【Drazil and Park】

前言 估计大家可能被点的权值(h)和边的长度(d)两者的维护卡了好久。我们可以来一次简单的转换,使复杂的数据变得简单。 Main Tips 不妨把边长看成一个点,它拥有权值 did_idi​ ,那么相对应的原先的点也获得一个权值 di=0d_i = 0di​=0 。为了不让边完全成为一个“点”,我们将它的 hih_ihi​ 设为 -inf,保证不是从边进入或出来。再用线段树维护一条 4×n−34 \times n - 34×n−3 的点边集(再乘个二是因为我们要拆一个环), l_vall\_vall_val

pikabi的博客 324

LabVIEW小白福音:手把手教你用NI采集卡搭建振动信号采集系统(附源码和避坑指南)

本文为LabVIEW初学者提供详细的NI采集卡振动信号采集系统搭建指南,涵盖硬件连接、驱动安装、信号处理及性能优化等关键步骤。特别针对振动信号采集系统中的常见问题提供解决方案,并附源码和避坑指南,帮助用户快速上手并避免常见错误。

weixin_30485379的博客 103

智能驾驶辅助系统(ADAS)全解析:功能详解 + 技术原理 + 实战案例

智能驾驶辅助系统(ADAS)是现代汽车技术的重要组成部分,旨在提升驾驶安全性和便利性。本文详细解析了ADAS的多个功能模块,包括自适应巡航控制(ACC)、车道偏离预警/车道保持辅助(LDW/LKA)、前向碰撞预警/自动紧急制动(FCW/AEB)、盲区检测/变道辅助(BSD/BSM)、倒车影像、自动泊车辅助(APA)、交通标志识别(TSR)、自动远光控制(AHB)、后方交叉来车预警(RCTA)和驾驶员疲劳监测。每个功能模块都基于特定的技术原理,如毫米波雷达、摄像头、传感器融合和深度学习算法,以实现对车辆周围环

weixin_43199439的博客 2106

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 339

45、数据挖掘学术文献推荐

本文是一篇关于数据挖掘领域的重要学术文献推荐,涵盖了经典理论与最新研究成果。内容包括关键研究论文、综述文章、教科书和专著的介绍,以及来自顶级会议和期刊的出版物推荐。此外,还探讨了数据挖掘与其他领域的交叉研究,如机器学习、统计学和数据库系统,并列举了多个实际应用案例。最后,分析了数据挖掘的未来发展趋势,如更加智能化的算法、高效的计算平台及隐私保护技术。无论是初学者还是专业人士,这些文献都将提供宝贵的学习资源和前沿动态。

qsc90123456的博客 230

把 KV Cache 压到 FP4:BitDecoding-FP4 的算法-系统协同设计复盘

长上下文推理卡在KV Cache的显存与带宽上,而现有FP4方案要么精度崩、要么速度废。这篇文章复盘BitDecoding-FP4如何用三个算法补丁加一个系统重构,在B300上把服务吞吐提升2.4–3.0倍,精度几乎不掉。

helloagent的博客 312

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 331

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 605

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

优选算法:分治-归并排序

交易逆序对的总数

Wangshijie1015的博客 148

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 24

408 算法 06|堆与 Top-K:最小的 10 个数,到底该用数组还是堆

2022(42) 找 100 万个数里最小的 10 个,官方给了"10 元素有序数组"和"大根堆"两种答案。我把两种都实现并数了比较次数:k=10 时两者几乎打平,k=10000 时堆少 111 倍。另附 2021(42) 计数排序的比较次数与稳定性实测。

m0_56226131的博客 437

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 425

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 174

算法64,字母异位词分组

代码核心思路是:互为字母异位词的字符串,在对其字符进行排序后,一定会得到相同的字符串。因此,可以将排序后的字符串作为哈希表的键(Key)来进行分组。

sheshibenniaodan的博客 201

【MPC 算法】Python 实战:模型预测控制(MPC)算法原理与代码实现

本文介绍模型预测控制(MPC)原理与Python实现。MPC通过滚动优化预测未来状态,结合系统模型、目标函数与约束条件,动态生成最优控制序列。以一阶温度系统为例,使用CVXPY构建凸优化问题,实现加热功率的智能调控。代码包含模型预测、目标函数设计(含温度跟踪与控制平滑惩罚)、输入约束及滚动更新机制。仿真结果表明,MPC能快速稳定温度至目标值60℃,且控制动作平滑合理,体现其在复杂系统中的优越性。

赖德发的博客 48

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 222

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 181

【前缀和+复合离散化】题解:双色矩形(two)_数据结构_算法优化_预处理_二维前缀和_STL_C++算法竞赛

给定一个 $n \times n$ 的黑白棋盘,初始按 $i+j$ 奇偶染色,经 $k$ 个格子颜色翻转后,求子矩形中黑白格子数差的绝对值最大值。由于 $n$ 可达 $10^9$,但 $k \leq 50$,可离散化关键点。枚举所有由修改点构成的矩形及其四边向外扩展(共 $16$ 种扩展方式),利用二维前缀和快速计算变化量,结合奇偶性判断多出的格子颜色,最终取最大绝对差。时间复杂度为 $O(k^4)$,在 $k \leq 50$ 下可行。

YLCHUP的博客 203
上一篇: CF1114F Please, another Queries on Array?【线段树+欧拉函数】
下一篇: P2572 [SCOI2010] 序列操作【线段树】
juruo_c
博客等级 码龄6年 520粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值