数星星



数星星

Accepted : 63   Submit : 245
Time Limit : 1000 MS   Memory Limit : 65536 KB
 

Description

天空中一共有N颗星星,FF同学想知道天空中的一个矩形区域内有多少颗星星。我们把天空放到直角坐标系中,就可以得到每颗星星的坐标,假设每个星星的坐标都是整数。

矩形区域我们用一个四元组表示(x1,y1,x2,y2)。x1,y1表示矩形左下角的坐标,x2y2表示矩形右上角的坐标。现在请你回答FF同学提出的问题:矩形(x1,y1,x2,y2)内有多少颗星星(包括边界上的)。FF是个好问的同学,最多一次能提出10000个问题,请你用最快的速度回答他。

 

 

输入格式:

       第一行一个整数N(N<=100000)代表总共星星个数。

       接下来N行,每行2个整数用空格分隔代表一颗星星的坐标x,y0<=x,y<1000)。其中任意两个星星都不在同一个坐标点上。

       接下来一个整数MM<=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;
}
原文地址:https://www.cnblogs.com/wujianwei/p/2442991.html