计蒜客 木桩涂涂看

问题描述

n 个木桩排成一排,从左到右依次编号为 1,2,3…n。每次给定 2 个整数 a,b(a≤b),蒜头君便骑上他的电动车从木桩 a 开始到木桩 b 依次给每个木桩涂一次颜色。但是 n 次以后 lele 已经忘记了第 i 个木桩已经涂过几次颜色了,你能帮他算出每个木桩被涂过几次颜色吗?


输入格式

第一行是一个整数 n(n≤100000)。

接下来的 n 行,每行包括两个整数 a, b (1≤a≤b≤n)。

输出格式

n 个整数,第 i 个数代表第 i 个木桩总共被涂色的次数。


样例输入

3
1 1
1 2
1 3
1
2
3
4

样例输出

3 2 1

分析

差分序列的基本应用

代码

#include <cstdio>
#include <iostream>
#include <algorithm>
#define maxn 100000
using namespace std;
int d[maxn + 5];
void add(int a, int b){
	d[a] += 1;
	d[b + 1] -= 1;
}
int main(){
	int n;
	scanf("%d", &n);
	for(int i = 1; i <= n; i++){
		int a, b;
		scanf("%d %d", &a, &b);
		add(a, b);
	}
	//依次输出元素 
	int t = d[1];
	printf("%d ", d[1]);
	for(int i = 2; i <= n; i++){
		printf("%d ", d[i] + t);
		t += d[i];
	}
	return 0;
}

posted @ 2019-05-18 22:39  阳离子  阅读(152)  评论(0编辑  收藏  举报