C++差分数组实现区间砍树问题
根据题意,我们需要对 n 棵树进行 q 次区间砍伐操作,每次砍掉 [L, R] 区间内的树。最后统计剩余多少棵树。 一个高效的做法是使用**差分数组**或**线段树**记录每个位置被砍的次数,最后统计未被砍过的位置数量。这里直接使用布尔数组标记 + 区间覆盖模拟复杂度为 O(n*q) 可能超时,因此推荐使用**区间合并**或**差分 + 前缀和**。 思路: - 初始化一个长度为 n+2 的标记数组,初始为 false(表示树还在)。 - 对每次操作区间 [L,R],将标记设为 true(被砍)。 - 最后统计标记为 false 的数量。 - 为了优化区间赋值,可以使用差分(快速标记区间),然后做前缀和还原。 ## 差分 + 前缀和实现 O(n+q) ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n, q; cin >> n >> q; // 差分数组,长度 n+2,避免越界 vector<int> diff(n + 2, 0); for (int i = 0; i < q; i++) { int L, R; cin >> L >> R; // 区间 [L, R] 被砍,标记为 1 diff[L] += 1; diff[R + 1] -= 1; } int remaining = 0; int current = 0; for (int i = 1; i <= n; i++) { current += diff[i]; if (current == 0) { remaining++; } } cout << remaining << endl; return 0; } ``` ## 代码说明 - 差分数组 diff 用于记录区间操作,每次区间 [L,R] 被砍,则 diff[L]++、diff[R+1]--。 - 循环 i 从 1 到 n,累加 current 得到当前树是否被砍(current > 0 表示被砍过)。 - current == 0 表示该位置从未被任何操作覆盖,树存活。 - 输出剩余存活树木数量。 例如输入: ``` 5 3 1 3 5 5 2 3 ``` 处理过程: - diff[1]++, diff[4]-- 表示 [1,3] 被砍 - diff[5]++, diff[6]-- 表示 [5,5] 被砍 - diff[2]++, diff[4]-- 表示 [2,3] 被砍 最终 current: - i=1: current=1 -> 被砍 - i=2: current=2 -> 被砍 - i=3: current=2 -> 被砍 - i=4: current=0 -> 剩余 - i=5: current=1 -> 被砍 剩余 1 棵树(位置4),输出 1。 ######[AI问答 | 668点数解答 | 2026-06-14 10:18:36]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)385
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)273
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)280
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)267
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)449
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)49
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)395
- C++实现:输入整数英文单词算乘积,输出数字与英文结果,可多次计算!(GPT | 2268点数解答 | 2024-05-24 01:55:27)408
- C语言巧解:计算整数区间内最遥远素数差值(阿里通义 | 428点数解答 | 2024-11-22 14:53:33)196
- C++ 实现:根据给定序列与条件计算满足要求的整数对数量(字节豆包 | 232点数解答 | 2025-04-23 17:33:20)181
- C++ 求解满足特定条件整数对数量:从 O(M^2) 到 O(N + M) 的优化(百度文心 | 1197点数解答 | 2025-04-23 17:36:27)257
- 浙闽“板凳龙”舞龙队 300 秒螺线盘入:位置与速度全揭秘(阿里通义 | 886点数解答 | 2024-09-07 10:31:31)671