📌  相关文章
📜  教资会网络 | UGC NET CS 2015 年六月 – II |问题2(1)

📅  最后修改于: 2023-12-03 15:26:03.458000             🧑  作者: Mango

教资会网络 | UGC NET CS 2015 年六月 – II |问题2

本文将向程序员介绍教资会网络中的 UGC NET CS 2015 年六月 – II 问题2。这个问题测试程序员对数据结构和算法的理解。

问题描述

有一个长度为 $n$ 的整数序列 $a_1, a_2, \cdots, a_n$,它的最小值是 $m$,最大值是 $M$,执行以下四个操作:

  1. 把一个数 $a_i$ 加上 $x$。
  2. 把一个数 $a_i$ 减去 $x$。
  3. 查询每个数的值除以 $y$ 的余数有多少个,$y$ 是一个正整数。
  4. 查询 $[l, r]$ 范围内有多少个数小于等于 $p$。

请实现一个程序来执行上述操作。

输入格式

第一行包含一个整数 $n$。 第二行包含 $n$ 个整数 $a_1, a_2, \cdots, a_n$。 第三行包含一个整数 $m$。 第四行包含一个整数 $M$。 第五行包含一个整数 $q$,表示操作个数。 接下来 $q$ 行,每行一个操作,格式如下:

  • 1 i x:第 $i$ 个数加上 $x$。
  • 2 i x:第 $i$ 个数减去 $x$。
  • 3 y:查询每个数的值除以 $y$ 的余数有多少个。
  • 4 l r p:查询 $[l, r]$ 范围内有多少个数小于等于 $p$。
输出格式

对于每个操作 $3$,输出每个数的值除以 $y$ 的余数有多少个,每行一个数。 对于每个操作 $4$,输出 $[l, r]$ 范围内有多少个数小于等于 $p$。

样例

输入:

5
3 2 4 1 5
1
5
3 2
4 1 5 4
1 3 5
2 1 2
4 2 4 3

输出:

1
1
2
2
1
思路分析
操作1和操作2

操作1和操作2只需要对相应的数进行加减即可,时间复杂度为 $O(1)$。

操作3

对于每个数 $a_i$,根据余数 $r=a_i\mod y$,将它归为在第 $r$ 组内,然后用一个桶记录下每组内有多少个数即可。时间复杂度 $O(n)$。

操作4

先将整个序列升序排序,然后二分查找区间 $[l,r]$ 中小于 $p$ 的位置 $pos$,并返回 $pos-l+1$。时间复杂度为 $O(n\log n)$。

对程序员的帮助

本题考察了数据结构与算法中的常见问题,包括求余数、桶排序、二分查找。通过解决本题,程序员可以提高对这些问题的认识,并且可以使用这些知识解决类似的问题。