持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情
语文成绩
题目背景
语文考试结束了,成绩还是一如既往地有问题。
题目描述
语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗?
输入格式
第一行有两个整数 ,,代表学生数与增加分数的次数。
第二行有 个数,,代表各个学生的初始成绩。
接下来 行,每行有三个数,,,,代表给第 个到第 个学生每人增加 分。
输出格式
输出仅一行,代表更改分数后,全班的最低分。
样例 #1
样例输入 #1
3 2
1 1 1
1 2 1
2 3 1
样例输出 #1
2
提示
对于 的数据,有 。
对于 的数据,有 。
对于 的数据,有 。
对于 的数据,有 ,,学生初始成绩 ,。
分析
qaq这题暴力肯定是不行的,肯定会超时,对于这种多询问问题,差分是很好的做法,然后边差分,边找出最小值就ok啦。
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <cmath>
#define int long long
#define AC return
#define Please 0
using namespace std;
const int N=5e6+10;
int fa[N];
typedef pair<int,int>PII;
int a[N],b[N];
inline int read(){//快读
int x=0,f=1;char ch=getchar();
while(ch<'0' || ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
AC x*f;
}
inline void insert(int l,int r,int c){
b[l]+=c;
b[r+1]-=c;
}
signed main(){
int n,p;
n=read(),p=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
for(int i=1;i<=n;i++){
insert(i,i,a[i]);
}
while(p--){
int l,r,c;
cin>>l>>r>>c;
insert(l,r,c);
}
for(int i=1;i<=n;i++){
a[i]=a[i-1]+b[i];
}
int minn=0x3f3f3f3f;
for(int i=1;i<=n;i++){
minn=min(minn,a[i]);
}
cout<<minn<<endl;
AC Please;
}
希望能帮助到大家()!