Tsinghua MOOC 范围查询(Range)
来源:互联网 发布:dll文件恢复软件 编辑:程序博客网 时间:2024/05/22 06:05
数轴上有n个点,对于任一闭区间 [a, b],试计算落在其内的点数。
输入
第一行包括两个整数:点的总数n,查询的次数m。
第二行包含n个数,为各个点的坐标。
以下m行,各包含两个整数:查询区间的左、右边界a和b。
输出
对每次查询,输出落在闭区间[a, b]内点的个数。
输入样例
5 2
1 3 7 9 11
4 6
7 12
输出样例
03
限制
0 ≤ n, m ≤ 5×105
对于次查询的区间[a, b],都有a ≤ b
各点的坐标互异
各点的坐标、查询区间的边界a、b,均为不超过10^7的非负整数
时间:2s,内存:256MB
思路
使用二分查找快速查找需要的数据,并返回下标。此二分查找返回值为不大于查找元素的最大元素的下标,故查找左边界a时,如果a恰好被找到,则最终结果需要+1,等同于left-1。
注意,输入序列不一定有序,需要先排序。
代码如下:
#include <cstdio>#include <cstdlib>const int SZ = 1<<20; //提升IO buff struct fastio{ char inbuf[SZ]; char outbuf[SZ]; fastio(){ setvbuf(stdin,inbuf,_IOFBF,SZ); setvbuf(stdout,outbuf,_IOFBF,SZ); }}io;#define SIZE 500010int vect[SIZE];int cmp( const void *a, const void *b){return *(int*)a - *(int*)b;}int binsearch(int lo, int hi, int *p, int e){while(lo<hi){int mi = (lo + hi) >> 1;(e < p[mi])? hi = mi : lo = mi+1;}return --lo;}int main(){int n, m; int i, a, b; //freopen("in.txt", "r", stdin);scanf("%d %d", &n, &m);for(i = 0; i < n; i++){scanf("%d", vect + i);}qsort( vect, n, sizeof(int), cmp);for(i = 0; i < m; i++){scanf("%d %d", &a, &b);int left = binsearch( 0, n, vect, a);int right = binsearch( 0, n, vect, b);if(vect[left] == a && left >= 0) left--;printf("%d\n", right - left);}return 0;}
0 0
- Tsinghua MOOC 范围查询(Range)
- Tsinghua OJ:范围查询(Range)
- Tsinghua MOOC 祖玛(Zuma)
- 1-1 范围查询(Range)
- 范围查询(Range)
- 范围查询(Range)
- Tsinghua MOOC 列车调度(Train)
- THU数据结构编程作业一:查询范围(Range)
- Lucene2.9 范围查询Range Query
- 范围查询(Range)-----学堂在线编程题
- 范围最小值查询 RMQ (Range Minimum Query)
- 创建range(范围)分区!
- Go语言范围(Range)
- LeetCode 303 Range Sum Query - Immutable(范围总和查询-永久不变)(*)
- LeetCode 307 Range Sum Query - Mutable(范围和查询-可变)
- leetcode 34. Search for a Range(C语言,查询范围)46
- Geeks - Range Minimum Query RMQ范围最小值查询
- 学堂在线-数据结构-PA1-范围查询(Range)-解题报告
- 链表判断环问题
- 从一家电子商务网站学到的经验教训
- 跨站请求伪造CSRF防护方法
- @Repository、@Service、@Controller 和 @Component
- Cover Flow编程1118
- Tsinghua MOOC 范围查询(Range)
- [MS SQL]外键约束
- StringBuffer(可变字符串)和StringBuilder
- C# Windows Schedule task之获取task下次运行时间
- PHP各个版本区别
- JAVA设计模式之 命令模式【Command Pattern】
- AD 用户属性userAccountControl的详细解释
- Linux操作系统文件系统基础知识详解
- eclipse中Android模拟器常见的问题解决方法汇总