小朋友分苹果--差分数组

题目描述

小朋友排成一排,老师给他们分苹果。小朋友从左到右标号1..N。有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li+1个小朋友每人发Ci个苹果。最后老师想知道每个小朋友有多少苹果。

输入   第一行两个整数N、M,表示小朋友个数和老师个数。 
  接下来M行,每行三个整数Li、Ri、Ci,意义如题目表述。 输出   一行N个数,第i个数表示第i个小朋友手上的水果。  样例输入
5 3
1 2 1
2 3 2
2 5 3
样例输出
1 6 5 3 3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cnt = 0;
int aa[105000];//建立差分数组  aa[i]记录第i个小朋友比i-1个小朋友少的数量
int n, m;

int main() {
    int i;
    scanf("%d%d",&n,&m);
    int a,b,c;
    for(i = 0; i < m; i++){
        scanf("%d%d%d",&a,&b,&c);
        aa[a] += c;
        aa[b+1] -= c;    
    }
    for(i = 1; i <= n; i++){
            cnt += aa[i];
            printf("%d ",cnt);
    } 
    return 0;
}    

 

上一篇:数据结构与算法 —— 归并排序


下一篇:【NOIP2013】火柴排队 题解(贪心+归并排序)