前言:
这篇文章还是是为了帮助一些
像我这样的菜鸟
找到简单的题解
题目描述
期末考试终于结束了,
小爱老师正在整理学生的成绩。
由于老师在考试之后要讲题,
所以同学们的分数会在考试后有所增加,
小爱老师需要多次给某些同学增加分数。
小爱老师非常关心最低分是多少,
你需要告诉她班级的最低分。
输入描述
第一行两个整数n,p,代表学生数与增加分数的次数。
第二行有n个数,代表每个学生的初始成绩。
接下来的p行,每行三个数:x,y,z,代表给从第x个学生到第y个学生增加z分。
输出描述
一个整数,最低分。
输入样例#1
3 2
1 1 1
1 2 1
2 3 1
输出样例#1
2
提示
对于40%的数据,有n<=1000
对于100%的数据,有n<=5*100000,p<=n
学生初始成绩<=100,z<=100
本题线下文件测评时的说明:
- 可执行文件名:score
- 提交源程序文件名:score.cpp
- 输入文件名:score.in
- 输出文件名:score.out
- 时间限制:1秒
- 空间限制:256MB
完整代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+5;
int a[N],b[N];
int main()
{
//freopen("score.in","r",stdin);
//freopen("score.out","w",stdout);
int n,p,x,y,z;
cin>>n>>p;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=a[i]-a[i-1];
}
while(p--)
{
cin>>x>>y>>z;
b[x]+=z;
b[y+1]-=z;
}
int ans=2e9;
for(int i=1;i<=n;i++)
{
a[i]=a[i-1]+b[i];
ans=min(ans,a[i]);
}
cout<<ans;
return 0;
}