题目描述
语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。
她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少,你能帮帮她吗?
输入格式
第一行有两个整数
n
,
p
n,p
n,p,代表学生数与增加分数的次数。
第二行有 n n n 个数, a 1 ∼ a n a_1 ∼ a_n a1∼an ,代表各个学生的初始成绩。
接下来 p p p 行,每行有三个数, x x x, y y y, z z z,代表给第 x x x 个到第 y y y 个学生每人增加 z z z 分。
输出格式
输出仅一行,代表更改分数后,全班的最低分。
输入样例
3 2
1 1 1
1 2 1
2 3 1
输出样例
2
数据范围
n
≤
5
×
1
0
6
n≤5×10^6
n≤5×106 ,
p
≤
n
p≤n
p≤n,学生初始成绩
≤
100
≤100
≤100,
z
≤
100
z≤100
z≤100
题解:差分
#include <bits/stdc++.h>
using namespace std;
const int N = 5 * 1e6 + 10;
int n, q;
int x, y, z;
int p[N], d[N];
int main()
{
cin >> n >> q;
for (int i = 1; i <= n; i ++) cin >> p[i];
while(q --)
{
cin >> x >> y >> z;
d[x] += z, d[y + 1] -= z;
}
int minv = 1 << 30;
for (int i = 1; i <= n; i ++)
{
d[i] += d[i - 1];
minv = min(minv, p[i] + d[i]);
}
cout << minv << endl;
return 0;
}