Countless Candies

Countless Candies
Time Limit: 1000 MS Memory Limit: 10240 K
Total Submit: 112(42 users) Total Accepted: 43(37 users) Rating: Special Judge: No
Description
     小w喜欢吃糖果,一次偶然的机会,小w再次邂逅了阿拉神灯。      阿拉神灯知道小w的心意之后问:你想要多少糖哈,亲~      小w笑答:不要太多啦,吃不完就够了~      阿拉神灯:¥^ @ % & * R & ^...      善良的小w想把这些糖果分一些给自己的好朋友。小w有N 个好朋友,编号从1到N。小w要分N次,每次操作如下:[L, R]表示给编号在L到R 的朋友每人一块糖。最后,小w想知道每个朋友分得了多少糖果,由于人缘太好,朋友太多而没法统计,请帮助小w计算一下最后的结果吧。
Input
第 1 行:一个整数N 表示朋友的数量(1 ≤N≤100000) 第 2到N+1行:每行两个整数L,R,表示编号在[L, R]内的朋友,每人分得一块糖。 多组测试数据,处理到文件结束。
Output
N 个整数表示每个朋友得到的糖果的数量,每组测试数据占一行。
Sample Input
4
1 2
2 3
1 3
1 4
Sample Output

3 4 3 1

 为了使其时间复杂度最低,我们弄一个数组,在a[l]++,在a[r+1]--这样在输出的时候应该有的有不应该有的没有

#include<cstdio>
#include<cmath>
#include<queue>
#include<iostream>
using namespace std;
int a[100001];
int main()
{
    int N;
    while(~scanf("%d",&N))
    {
        int i,l,r;
        int h=N;
        memset(a+1,0,(N+1)*sizeof(int));
        while(h--)
        {
            scanf("%d%d",&l,&r);
            a[l]++;
            a[r+1]--;
        }
        l=0;
        for(i=1;i<N;i++)
        {
            l+=a[i];
            printf("%d ",l);
        }
        l+=a[N];
        printf("%d
",l);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/beige1315402725/p/4981629.html