您的位置:首页 > 其它

【Codeforces 835 C. Star sky】+ dp

2017-08-05 09:21 531 查看
C. Star sky

time limit per test2 seconds

memory limit per test256 megabytes

inputstandard input

outputstandard output

The Cartesian coordinate system is set in the sky. There you can see n stars, the i-th has coordinates (xi, yi), a maximum brightness c, equal for all stars, and an initial brightness si (0 ≤ si ≤ c).

Over time the stars twinkle. At moment 0 the i-th star has brightness si. Let at moment t some star has brightness x. Then at moment (t + 1) this star will have brightness x + 1, if x + 1 ≤ c, and 0, otherwise.

You want to look at the sky q times. In the i-th time you will look at the moment ti and you will see a rectangle with sides parallel to the coordinate axes, the lower left corner has coordinates (x1i, y1i) and the upper right — (x2i, y2i). For each view, you want to know the total brightness of the stars lying in the viewed rectangle.

A star lies in a rectangle if it lies on its border or lies strictly inside it.

Input

The first line contains three integers n, q, c (1 ≤ n, q ≤ 105, 1 ≤ c ≤ 10) — the number of the stars, the number of the views and the maximum brightness of the stars.

The next n lines contain the stars description. The i-th from these lines contains three integers xi, yi, si (1 ≤ xi, yi ≤ 100, 0 ≤ si ≤ c ≤ 10) — the coordinates of i-th star and its initial brightness.

The next q lines contain the views description. The i-th from these lines contains five integers ti, x1i, y1i, x2i, y2i (0 ≤ ti ≤ 109, 1 ≤ x1i < x2i ≤ 100, 1 ≤ y1i < y2i ≤ 100) — the moment of the i-th view and the coordinates of the viewed rectangle.

Output

For each view print the total brightness of the viewed stars.

Examples

input

2 3 3

1 1 1

3 2 0

2 1 1 2 2

0 2 1 4 5

5 1 1 5 5

output

3

0

3

input

3 4 5

1 1 2

2 3 0

3 3 1

0 1 1 100 100

1 2 2 4 4

2 2 1 4 7

1 50 50 51 51

output

3

3

5

0

Note

Let’s consider the first example.

At the first view, you can see only the first star. At moment 2 its brightness is 3, so the answer is 3.

At the second view, you can see only the second star. At moment 0 its brightness is 0, so the answer is 0.

At the third view, you can see both stars. At moment 5 brightness of the first is 2, and brightness of the second is 1, so the answer is 3.

题意 : 有 n 颗星星,给出每颗星星的坐标和亮度,q 次查询,给出左上角 和右下角的坐标问第 t 秒矩形内所有星星的亮度和,初始亮度为 o 的星星,第 t 秒的亮度为 (o + t)% (c + 1)

思路 : dp ~ dp[x][y][k] 表示 1 ~ x,1~y这个矩形内亮度为 k 的星星的个数,然后 dp[x][y][k] = dp[x - 1][y][k] + dp[x][y - 1][k] - dp[x - 1][y - 1]k,查询时 : ans =(o + t)% (c + 1) * dp[x2][y2][o] - dp[x1 - 1][y2][o] - dp[x2][y1 - 1][o] + dp[x1 - 1][x2 - 1][o] (重复减去的部分)

AC代码:

#include<cstdio>
typedef long long LL;
LL dp[110][110][12];
int main()
{
int n,q,c,x,y,s;
scanf("%d %d %d",&n,&q,&c);
for(int i = 0; i < n; i++)
scanf("%d %d %d",&x,&y,&s),dp[x][y][s]++;
for(int k = 0; k <= c; k++)
for(int i = 1; i <= 100; i++)
for(int j = 1; j <= 100; j++)
dp[i][j][k] += dp[i - 1][j][k] + dp[i][j - 1][k] - dp[i - 1][j - 1][k];
while(q--){
int t,x1,y1,x2,y2;
scanf("%d %d %d %d %d",&t,&x1,&y1,&x2,&y2);
LL ans = 0;
for(int i = 0; i <= c; i++)
ans += (LL)(dp[x2][y2][i] - dp[x1 - 1][y2][i] - dp[x2][y1 - 1][i] + dp[x1 - 1][y1 - 1][i]) * ((i + t) % (c + 1));
printf("%lld\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codeforces dp