codeforces 835C Star sky(二维树状数组)
2017-08-01 01:27
267 查看
C. Star sky
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard 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
output
input
output
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.
比较裸的二维树状数组,有一个思维点在于需要取模。每次查询的值不一样,但是因为c最多只有10,所以记录下0-10分别是哪个值即可。
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <map>
using namespace std;
const int MAXN=110;
int a[11][MAXN][MAXN];
int lowbit(int i){
return i&-i;
}
int c;
int nn=100;
int t;
int tt;
void add(int x,int y,int num){
for(int i=x;i<=nn;i+=lowbit(i)){
for(int j=y;j<=nn;j+=lowbit(j)){
a[tt][i][j]+=(num+tt)%(c+1);
}
}
}
int sum(int i, int j){
int result = 0;
for(int x = i; x > 0; x -= lowbit(x)) {
for(int y = j; y > 0; y -= lowbit(y)) {
result += a[tt][x][y];
}
}
//printf("%d %d %d\n",i,j,result);
return result;
}
int main(){
int n,q;
scanf("%d%d%d",&n,&q,&c);
for(int i=0;i<n;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
for(tt=0;tt<=c;tt++){
add(x,y,z);
}
}
for(int i=0;i<q;i++){
int x1,y1,x2,y2;
scanf("%d%d%d%d%d",&t,&x1,&y1,&x2,&y2);
tt=t%(c+1);
printf("%d\n",sum(x2,y2)+sum(x1-1,y1-1)-sum(x1-1,y2)-sum(x2,y1-1));
}
}
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard 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.
比较裸的二维树状数组,有一个思维点在于需要取模。每次查询的值不一样,但是因为c最多只有10,所以记录下0-10分别是哪个值即可。
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <map>
using namespace std;
const int MAXN=110;
int a[11][MAXN][MAXN];
int lowbit(int i){
return i&-i;
}
int c;
int nn=100;
int t;
int tt;
void add(int x,int y,int num){
for(int i=x;i<=nn;i+=lowbit(i)){
for(int j=y;j<=nn;j+=lowbit(j)){
a[tt][i][j]+=(num+tt)%(c+1);
}
}
}
int sum(int i, int j){
int result = 0;
for(int x = i; x > 0; x -= lowbit(x)) {
for(int y = j; y > 0; y -= lowbit(y)) {
result += a[tt][x][y];
}
}
//printf("%d %d %d\n",i,j,result);
return result;
}
int main(){
int n,q;
scanf("%d%d%d",&n,&q,&c);
for(int i=0;i<n;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
for(tt=0;tt<=c;tt++){
add(x,y,z);
}
}
for(int i=0;i<q;i++){
int x1,y1,x2,y2;
scanf("%d%d%d%d%d",&t,&x1,&y1,&x2,&y2);
tt=t%(c+1);
printf("%d\n",sum(x2,y2)+sum(x1-1,y1-1)-sum(x1-1,y2)-sum(x2,y1-1));
}
}
相关文章推荐
- Codeforces 835C Star sky【思维+暴力预处理二维前缀和】
- CodeForces - 835C Star sky(预处理加二维处理)
- Codeforces 835C - Star sky 【预处理前缀和】
- CodeForces 835C - Star sky | Codeforces Round #427 (Div. 2)
- Codeforces 707E Garlands(二维树状数组)
- CodeForces - 835C Star sky (前缀和)
- [CodeForces 677D] Vanya and Treasure (二维树状数组+静态前缀最小值)
- codeforces--707E. Garlands(二维树状数组)
- Codeforces 853C Star sky(二维前缀和)
- CodeForces 341D Iahub and Xors(二维树状数组)
- Codeforces 869 E. The Untended Antiquity 二维树状数组
- [Codeforces 341D] Iahub and Xors (二维树状数组)
- Codeforces 835C-Star sky
- Codeforces 707 E. Garlands (二维树状数组)
- codeforces 835C(二维前缀和)
- CodeForces - 835C - Star sky (dp + 周期)
- CodeForces - 835C Star sky(dp)
- POJ 题目2155 Matrix(二维树状数组)
- codeforces 827C 树状数组
- POJ2155 - Matrix (二维树状数组)