题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1491
You won't believe it, but once, in ancient times, there happened the following story. At a meeting of the Round Table, King Arthur stood up and said: “Let each knight sitting on my right not farther than
b places and not nearer than
a places receive from me
c gold coins.” If we number the knights from 1 to
N counter-clockwise so that the knight sitting on Arthur's right is numbered 1 and the knight sitting on Arthur's left is numbered
N, then we have that the king gave
c gold coins to the knights with numbers
a,
a + 1, …,
b.
Having looked at Arthur's generous deed, the noble knights started to stand up one after another and tell their three numbers
ai,
bi,
ci (1 ≤
i ≤
N). After each of these utterances, the knights with numbers from
ai to
bi received
ci gold coins each from the king.
Since each knight was very noble, either
ai >
i or
bi <
i. You task is to help the knights to learn how many gold coins each of them received.
Input
The first line contains the number of King Arthur's knights
N (2 ≤
N ≤ 100000). In the next line, there are integers
a,
b, and
c, which the king said (1 ≤
a ≤
b ≤
N; 1 ≤
c ≤ 10000). Each of the next
N lines contains three integers
ai,
bi,
ci, which the
ith knight said (1 ≤
ai ≤
bi ≤
N; 1 ≤
ci ≤ 10000).
Output
Output
N numbers separated with a space. The
ith number is the number of gold coins received by the
ith knight.
Samples
input |
output |
4
2 3 2
2 4 1
3 4 1
1 2 1
1 1 1
|
2 4 4 2
|
7
1 7 1
2 3 4
3 5 3
1 2 1
5 7 4
2 4 10
3 4 2
1 6 3
|
5 19 23 19 11 8 5
|
Problem Author: Alexander Toropov
Problem Source: XIII-th USU Junior Contest, October 2006
题意:
给出染色区间,求每个区间被染色次数!
代码如下:
#include <cstdio>
#include <cstring>
#include <cmath>
int main()
{
int n;
int aa, bb, cc;
int a, b, c;
int s[100017];
while(~scanf("%d",&n))
{
memset(s,0,sizeof(s));
scanf("%d%d%d",&aa,&bb,&cc);
s[aa]+=cc, s[bb+1]-=cc;
for(int i = 0; i < n; i++)
{
scanf("%d%d%d",&a,&b,&c);
s[a]+=c, s[b+1]-=c;
}
int ans = 0;
ans+=s[1];
printf("%d",ans);
for(int i = 2; i <= n; i++)
{
ans+=s[i];
printf(" %d",ans);
}
printf("\n");
}
return 0;
}