E. Till I Collapse

本文分享了作者从辅助转向主攻过程中学习线段树和主席树的经验,并通过一道具体题目介绍了如何利用这些数据结构解决区间不重复元素计数的问题。

一些躺床上开始写题解的日常

(上一次的审核不通过了已经QAQ)

开始从辅助转为主攻

(原因复杂)

所以很多算法要学着自己写一遍了

线段树之前知道大致流程,但是没自己写过

主席树同理

之前二维数点的时候就想学着要学了

(但是我现在看到二维数点满脑子还是树状数组QAQ)

终于是学了

于是刷了一题

题意:给一个序列1-n,求k为1-n时满足被分隔成ans个子串中不同元素个数小于等于k,求ans

思路是维护区间不重复元素个数,线段树的板子中我们知道sum就是前缀区间的不重复元素个数。

然后我就想当然的枚举左端点,查找右端点使得前缀和的差为k,但是忽略了一个问题:不能保证是贪心的情况啊,也许后面也是这个数呢。(但是我现在想了想可以用lower_bound,醒了再去试一试)

考虑其他方法,已知主席树求的是区间l-r的第k大的数字,那么如果是1-r的话求的就是有k个不同元素的时候的数字,但是当我们不是存储个数而是存储上一次出现的位置的时候,就可以求解在哪个位置的时候贪心最好。

睡觉

<think>好的,我需要处理用户关于“wait till interrupts are not pending”的查询。首先,我得理解这个术语的具体含义和应用场景。 用户可能是在嵌入式系统或操作系统开发中遇到这个概念。中断处理是这些系统中的关键部分,而“等待直到中断未挂起”通常涉及处理器在进入低功耗模式前的状态检查。当系统准备进入休眠时,必须确保没有未处理的中断,否则可能会错过重要事件或无法唤醒。 接下来,我需要考虑不同的处理器架构可能有不同的实现方式。例如,ARM Cortex-M系列使用WFI(Wait For Interrupt)指令,而其他架构可能有类似的机制。需要解释这个指令的作用,以及在实际使用中如何确保中断状态被正确检查。 还要注意,开发者在使用此类指令时常见的错误,比如未能正确清除中断标志或配置中断控制器,导致系统无法唤醒。需要提醒用户检查中断挂起寄存器,并确保在进入低功耗模式前所有挂起的中断已被处理。 此外,代码示例会有助于用户理解。例如,在Cortex-M中,可能会先检查中断状态,然后执行WFI指令。但要注意,示例代码需要根据具体架构调整,避免误导用户。 最后,总结关键点,强调正确使用中断等待机制的重要性,以及可能带来的功耗优化效果。同时,提示用户参考硬件手册,因为不同厂商的实现细节可能不同。</think>在计算机系统(尤其是嵌入式系统或操作系统开发)中,“wait till interrupts are not pending” 表示一种处理器状态控制逻辑,通常与低功耗模式或中断处理相关。以下是逐步解释: --- ### 1. **核心概念** - **中断(Interrupt)**:硬件或软件发出的信号,要求处理器暂停当前任务处理紧急事件。 - **挂起中断(Pending Interrupt)**:已触发但尚未被处理器响应的中断。 - **等待中断未挂起**:在进入低功耗状态前,确保所有挂起中断已被处理,避免遗漏关键事件。 --- ### 2. **典型应用场景** 当系统尝试进入低功耗模式(如休眠)时: 1. **检查中断状态**:通过寄存器(如 `NVIC_ISPR` in ARM Cortex-M)确认是否有未处理中断。 2. **等待条件**:若存在挂起中断,延迟进入低功耗模式,直到所有中断被处理。 3. **执行低功耗指令**:例如 ARM 的 `WFI` (Wait For Interrupt) 指令。 --- ### 3. **代码逻辑示例(伪代码)** ```c void enter_low_power_mode() { while (check_interrupt_pending() == true) { // 等待所有挂起中断被清除 } __WFI(); // 执行等待中断指令 } ``` --- ### 4. **关键实现细节** - **原子性操作**:需保证检查中断状态和进入低功耗的操作为原子操作,避免竞态条件。 - **中断控制器配置**:需确保中断使能/屏蔽设置与低功耗逻辑匹配。 - **唤醒机制**:处理器需依赖中断唤醒,需提前配置唤醒源。 --- ### 5. **常见问题与解决** - **系统无法唤醒**:检查中断是否被错误屏蔽或优先级配置错误。 - **功耗未降低**:挂起中断未完全处理导致循环等待。 - **实时性影响**:需权衡低功耗与中断响应速度。 --- ### 6. **硬件架构差异** - **ARM Cortex-M**:通过 `__WFI()` 指令实现。 - **RISC-V**:使用 `wfi` 指令,行为取决于 `mie`(机器中断使能)寄存器。 - **x86**:通过 `HLT` 指令进入等待状态,依赖 `APIC` 中断控制器。 --- ### 总结 “Wait till interrupts are not pending” 是系统级编程中优化功耗与确保可靠性的关键机制,需结合硬件手册实现。开发者应关注: 1. 中断状态寄存器的正确读取 2. 低功耗指令的触发条件 3. 中断处理函数与唤醒逻辑的匹配 实际应用中需参考具体芯片文档(如 STM32 参考手册或 ARM Cortex-M 技术文档)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值