#19280. 明长城

明长城

你好!我是你的OI金牌教练。

上一题我们学习了前缀和(用于快速进行区间求和)。今天,我们把目光转向明朝,结合 “明长城与边防” 的历史背景,学习前缀和的“逆运算”——差分数组 (Difference Array)

这是 GESP 6级 乃至更高阶竞赛中处理区间修改问题的核心技巧。


第一部分:背景知识讲解

1. 明长城 (The Great Wall of Ming Dynasty)

我们今天看到的宏伟长城,大部分修筑于明朝。为了防御北方游牧民族(如鞑靼、瓦剌)的南下,明朝政府不仅修筑了高大的城墙,还建立了完善的防御体系,称为“九边重镇”。

2. 驻军与调防

长城防线绵延万里,并非每一处的兵力都是固定的。

  • 平时:各关口有固定的守军。
  • 战时:当某一段防线收到敌情预警时,朝廷会下令向该路段增兵
  • 特征:增兵通常是成段进行的。例如:“命令从山海关到居庸关这一段,所有烽火台各增兵 100 人。”

3. 算法痛点

如果边境频繁告急,大将军不断下达“区间增兵”的指令,我们需要快速计算出最终每一座烽火台的兵力情况,以便找出防守最薄弱的环节。


第二部分:题目内容

题目名称:长城防线 (Great Wall Defense)

题目描述

明朝的边境防线由 NN 座烽火台组成,它们顺次编号为 11NN。 起初,为了整修工事,所有烽火台的驻军数量都为 00

随着边境局势变化,兵部连续下达了 MM增兵令。 第 ii 次增兵令包含三个整数 Li,Ri,KiL_i, R_i, K_i,表示:从第 LiL_i 座烽火台到第 RiR_i 座烽火台(包含 LiL_iRiR_i),每一座烽火台都需要增加 KiK_i 名士兵。

在大将军戚继光执行完这 MM 次增兵令后,他需要视察防线,找出目前兵力最薄弱(士兵数量最少)的那一座烽火台,以及它的兵力是多少。

请你编写程序,计算出所有烽火台最终的兵力值,并输出其中的最小值

输入格式

第一行包含两个正整数 N,MN, M

  • NN 表示烽火台的数量。
  • MM 表示增兵令的数量。

接下来 MM 行,每行包含三个正整数 L,R,KL, R, K

  • 表示一次增兵操作:区间 [L,R][L, R] 内每个点加 KK

输出格式

输出一行一个整数,表示执行完所有命令后,整条防线上兵力最少的烽火台的士兵数量。

输入输出样例 #1

输入:

5 3
1 3 2
2 4 3
3 5 1

输出:

1

样例 #1 解释: 初始:[0, 0, 0, 0, 0]

  1. 指令 1 3 2:烽火台 1~3 各加 2。
    • 兵力变更为:[2, 2, 2, 0, 0]
  2. 指令 2 4 3:烽火台 2~4 各加 3。
    • 兵力变更为:[2, 5, 5, 3, 0]
  3. 指令 3 5 1:烽火台 3~5 各加 1。
    • 兵力变更为:[2, 5, 6, 4, 1]

最终兵力为 2, 5, 6, 4, 1。 最少的是第 5 座烽火台,兵力为 1

数据范围

对于 100%100\% 的数据:

  • 1N1061 \le N \le 10^6
  • 1M1061 \le M \le 10^6
  • 1LRN1 \le L \le R \le N
  • 1K10001 \le K \le 1000
  • 最终兵力值保证在 long long 范围内(实际上本题 10910^9 内,int 勉强够,但推荐 long long)。