思路
方法:差分的思想。本题用暴力大概率不会过。
变量:n,p,原数组a[],差分数组d[]。
步骤:
1.输入n,p
2.for循环:输入a[i];求d[i]=a[i]-a[i-1];
3.对于第x到y个学生加z分:d[x]+=z;d[y+1]-=z;
4.利用前缀和计算a[i]的值:a[i]=d[i]+a[i-1];
5.for循环:找到最小值
6.输出最小值
代码
#include<bits/stdc++.h>
using namespace std;
int n,p,a[5000005],d[5000005];
int main(){
cin>>n>>p;
for(int i=1;i<=n;i++){
cin>>a[i];
d[i]=a[i]-a[i-1];
}
for(int i=1;i<=p;i++){
int x,y,z;
cin>>x>>y>>z;
d[x]+=z;
d[y+1]-=z;
}
int ans=105;
for(int i=1;i<=n;i++){
a[i]=a[i-1]+d[i];
ans=min(a[i],ans);
}
cout<<ans;
return 0;
}
661

被折叠的 条评论
为什么被折叠?



