F: CET-4

Description

我们都知道现在的CET-4考试的总分是750.一天老师叫Flying统计班上CET-4的成绩分数段。
如有如下几个成绩456 256 566 525,那么456 到 567这个分数段就有 3 个人。
因为对于一个班来说,数据比较小,很容易就统计出来了,所以他就想如果统计的人数比较多,
该怎么样快速的统计出结果呢?由于Flying是做ACM的,所以就写了个程序,解决了这个问题。
你该如何来解决这个问题呢?

Input

输入第一行有两个数n,q。n代表学生总数(n <= 1,000,000),q代表询问次数,
询问在st, ed之间分数的学生个数,包括st和ed    ( q <= 100,000)。
第二行是n个学生的CET4成绩, 接下来q行分别是st和ed。

Output

输出st到ed这个分数段的学生总数,包括st和ed这连个分数。

Sample Input

5 5
4 3 2 2 1
0 2
0 5
4 6
5 7
2 4

Sample Output

3
5
1
0
4
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;

int main()
{
    int n, q;
    int cet[750];//数组统计每个分数的个数
    int start, end,score;
    int i, j;
    while (scanf("%d%d", &n, &q) != EOF)
    {
        memset(cet, 0, sizeof(cet));//初始化
        for (i = 0; i < n; i++)
        {
            scanf("%d", &score);
            cet[score]++;//统计
        }
        for (j = 0; j < q; j++)
        {
            int count = 0;
            scanf("%d%d", &start, &end);
            for (i = start; i <= end; i++)
            {
                count=count+cet[i];//计算
            }
            printf("%d\n", count);
        }
    }
    return 0;
}

 

posted @ 2018-03-20 11:05  A-inspire  Views(250)  Comments(0Edit  收藏  举报