解题思路:
在网上找了一个不用线段树而用差分数组求解的,看完后感觉智商是被狠狠地碾压了(>﹏<)
言归正传,所谓差分数组,就是说假设有两个数组d[i],a[i],d[i]=a[i]-a[i-1],d[0]=a[0],那么d[i]就是a[i]的差分数组,d[i]的前缀和就是a[i],即a[i]=d[i]+d[i-1]+...+d[0];
本题中,发苹果的方式是连续的,那么每次改变的差分数组只有d[l]和d[r+1],连续m次,
最后根据上述公式可以求出每个小朋友得到的苹果。
其实差分数组求和的原理就是数学上的裂项相消,可以说并不困难,可我就是没能想到,我能说什么呢!
参考代码:
#include<iostream> using namespace std; int d[100005]; //d[i]表示第i个小朋友比第i-1个小朋友多的苹果 int main() { int n,m,l,r,c; cin>>n>>m; while(m--){ cin>>l>>r>>c; d[l]+=c; //每一次发苹果第l个小朋友比第l-1个小朋友多c个, d[r+1]-=c; //第r+1个小朋友比第r个小朋友少c个。 } for(int i=1;i<=n;i++){ d[i]+=d[i-1]; //根据差分数组的性质进行求和 cout<<d[i]<<" "; } cout<<endl; return 0; }
0.0分
29 人评分
【绝对值排序】 (C++代码)浏览:720 |
杨辉三角 (C语言代码)浏览:504 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:692 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:527 |
母牛的故事 (C语言代码)浏览:495 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:477 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:744 |
求圆的面积 (C++代码)浮点数有误差!!!浏览:724 |
采药 (C语言代码)浏览:960 |
简单的a+b (C++代码)浏览:460 |