洛谷 P2367 语文成绩 题解

P2367 语文成绩 题解

题目

题目传送门

题解

思路

这题是一道经典的差分题。

使用一个数组\(c\)表示\(a\)的差分数组,\(c_i=a_i-a_{i-1}\)。当要修改第\(x\)\(y\)同学的成绩时,只需要在\(c\)中的\(c_{x}+z\)\(c_{y+1}-z\)就可以了。

由于差分数组的前缀和与原数组相同,我们修改\(c\)的区间起始两项时,就相当于对\(x\sim y\)进行修改了。

最后对\(c\)进行前缀和再输出就可以了。

代码

#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x7fffffff
#define EPS 1e-8
using namespace std;
int n,p,a[5000005],c[5000005];
int main(){
	cin>>n>>p;
	for(int i=1;i<=n;i++) {
		cin>>a[i];
		c[i]=a[i]-a[i-1];
	}
	while(p--){
		int l,r,s;
		cin>>l>>r>>s;
		c[l]+=s;
		c[r+1]-=s;
	}
	int mn=INT_MAX;
	for(int i=1;i<=n;i++){
		c[i]+=c[i-1];
		mn=min(mn,c[i]);
	}
	cout<<mn<<endl;
	return 0;
}
posted @ 2025-02-09 16:31  2789617221guo  阅读(100)  评论(0)    收藏  举报