语文成绩
题目背景
语文考试结束了,成绩还是一如既往地有问题。
题目描述
语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗?
输入格式
第一行有两个整数 $n$,$p$,代表学生数与增加分数的次数。
第二行有 $n$ 个数,$a_1 \sim a_n$,代表各个学生的初始成绩。
接下来 $p$ 行,每行有三个数,$x$,$y$,$z$,代表给第 $x$ 个到第 $y$ 个学生每人增加 $z$ 分。
输出格式
输出仅一行,代表更改分数后,全班的最低分。
样例 #1
样例输入 #1
3 2
1 1 1
1 2 1
2 3 1
样例输出 #1
2
提示
对于 $40\%$ 的数据,有 $n \le 10^3$。
对于 $60\%$ 的数据,有 $n \le 10^4$。
对于 $80\%$ 的数据,有 $n \le 10^5$。
对于 $100\%$ 的数据,有 $n \le 5\times 10^6$,$p \le n$,学生初始成绩 $ \le 100$,$z \le 100$。
#include<iostream>
int a[5000010],b[5000010],n,m,ans=1e9;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
b[i]+=a[i],b[i+1]-=a[i];
}
while(m--){
int l,r,c;
scanf("%d%d%d",&l,&r,&c);
b[l]+=c,b[r+1]-=c;
}
for(int i=1;i<=n;i++){
b[i]+=b[i-1];
if(b[i]<ans)ans=b[i];
}
printf("%d",ans);
return 0;
}