数星星 |
||
Accepted : 63 | Submit : 245 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB | |
Description |
||
天空中一共有N颗星星,FF同学想知道天空中的一个矩形区域内有多少颗星星。我们把天空放到直角坐标系中,就可以得到每颗星星的坐标,假设每个星星的坐标都是整数。 矩形区域我们用一个四元组表示(x1,y1,x2,y2)。x1,y1表示矩形左下角的坐标,x2,y2表示矩形右上角的坐标。现在请你回答FF同学提出的问题:矩形(x1,y1,x2,y2)内有多少颗星星(包括边界上的)。FF是个好问的同学,最多一次能提出10000个问题,请你用最快的速度回答他。
输入格式: 第一行一个整数N(N<=100000)代表总共星星个数。 接下来N行,每行2个整数用空格分隔代表一颗星星的坐标x,y(0<=x,y<1000)。其中任意两个星星都不在同一个坐标点上。 接下来一个整数M(M<=10000)代表问题的个数。 接下来M行,每行4个整数用空格分隔代表一个矩形区域x1,y1,x2,y2 (0<=x1,y1,x2,y2<1000)。 输出格式: 对于每一个问题,输出一个整数A,代表矩形区域内星星个数。 |
||
Sample Input |
||
5 1 7 4 0 9 4 8 8 2 4 2 0 0 6 7 1 1 5 7 |
||
Sample Output |
||
3 2 |
||
Source |
||
2010年湘潭大学程序设计比赛(Internet) | ||
[ Submit Source Code ] |
[ Home Page ] [ Go Back]
View Code
#include <iostream> #include <stdio.h> using namespace std; int a[1001][1001]; int main() { int i,j; int n,x,y; // cin>>n; scanf("%d",&n); for (i=0;i<n;i++) { // cin>>x>>y; scanf("%d%d",&x,&y); a[x+1][y+1]=1; } for (i=1;i<1001;i++) { for(j=1;j<1001;j++) { a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1]; } } cin>>n; while(n--) { int x1,y1; //cin>>x>>y>>x1>>y1; scanf("%d%d%d%d",&x,&y,&x1,&y1); cout<<a[x1+1][y1+1]-a[x][y1+1]-a[x1+1][y]+a[x][y]<<endl; } return 0; }