洛谷 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;
}

浙公网安备 33010602011771号