题目
题目描述:
小明老师总是写错成绩,所以当他修改成绩的时候,总是累得不行。他总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮他吗?
【输入】
共
p
+
2
p + 2
p+2行。
第一行有两个整数
n
n
n,
p
p
p,代表学生总数和增加分数的次数
(
n
<
=
5000000
,
p
<
=
n
)
(n <= 5000000, p <= n)
(n<=5000000,p<=n)。
第二行有
n
n
n个数,
a
1
a_{1}
a1~
a
n
a_{n}
an,代表每个学生的初始成绩
(
a
i
<
=
100
)
(a_{i} <= 100)
(ai<=100)。
接下来
p
p
p行,每行有三个数,
x
,
y
,
z
x, y, z
x,y,z,代表给第
x
x
x个到第
y
y
y个学生每人增加
z
z
z分
(
x
<
=
y
<
=
n
,
z
<
=
100
)
(x <= y <= n, z <= 100)
(x<=y<=n,z<=100)。
【输出】
输出仅一行,一个数,代表更改分数后,全班的最低分。
【输入样例】
3 2
1 1 1
1 2 1
2 3 1
【输出样例】
2
题解
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=5000005;
ll n,p,a[N],d[N],ans=N*200;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>p;
for(ll i=1;i<=n;i++) cin>>a[i];
for (ll i=1;i<=p;i++){
ll x,y,z;
cin>>x>>y>>z;
d[x]+=z,d[y+1]-=z;
}
for (ll i=1;i<=n;i++){
d[i]+=d[i-1];
a[i]+=d[i];
ans=min(ans,a[i]);
}
cout<<ans;
return 0;
}