刷过一题之区间最小值

长度为n的数列A,以及q个询问,每次询问一段区间的最小值。

输入

第一行,一个整数n
第二行,n个数,表示A数组,用空格隔开。
第三行,一个正整数q
第4到第q+3行每行两个正整数L、R(L<=R),表示一段区间,用一个空格隔开。

输出

针对每个询问,输出结果。每个结果占一行。

输入示例

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

输出示例

2
2
3

数据规模:n, q, Ai<=100000

这题的难点就在于如何做预处理。对于预处理的大表,我们只需要打印其中2^n行,其余行就可以进行区间覆盖。

 1 #include<iostream>
 2 using namespace std;
 3 int s[17][100005],ll=1,l;
 4 int n[100005];
 5 int main()
 6 {
 7     int pl;
 8     scanf("%d",&pl);
 9     for(int i=0;i<pl;i++) {scanf("%d",&n[i]);s[0][i]=n[i];}
10     for(;ll<pl;ll*=2) l++;
11     l-=1;
12     for(int i=1;i<=l;i++)
13         for(int j=0;j<pl;j++)
14             s[i][j]=min(s[i-1][j],s[i-1][min(j+(1<<(i-1)),pl-1)]);
15     int a;
16     scanf("%d",&a);
17     for(int i=0;i<a;i++)
18     {
19         int x,y;
20         scanf("%d%d",&x,&y);
21         int con=y-x+1;
22         int temp=0;
23         ll=1;
24         for(;ll<con;ll*=2) temp++;
25         if(temp==0) temp=1;
26         ll/=2;
27         if(ll==0) ll=1;
28         printf("%d\n",min(s[temp-1][x-1],s[temp-1][y-ll]));
29     }
30     //system("pause>nul");
31     return 0;
32 }

时间: 2024-08-21 07:08:08

刷过一题之区间最小值的相关文章

刷过一题之矩阵最小值

输入 第一行n和m,表示行数和列数接下来n行表示矩阵再来一行一个整数q,表示询问个数接下来q行,每行四个整数x1,y1,x2,y2表示左上右下的坐标 输出 对于每个询问输出一个整数表示该矩阵范围内的整数和 输入示例 5 51 2 5 4 11 1 7 6 88 7 9 5 24 4 4 1 85 10 11 13 732 1 4 32 2 5 54 1 5 4 输出示例 4510352 n,m < 2001q < 100001矩阵内所有数小于2000 前缀和,区间覆盖问题.想一想数学中的集合与

线段树2 求区间最小值

线段树2 求区间最小值 从数组arr[0...n-1]中查找某个数组某个区间内的最小值,其中数组大小固定,但是数组中的元素的值可以随时更新. 数组[2, 5, 1, 4, 9, 3]可以构造如下的二叉树(背景为白色表示叶子节点,非叶子节点的值是其对应数组区间内的最小值,例如根节点表示数组区间arr[0...5]内的最小值是1): 线段树的四种操作: 1.线段树的创建 2.线段树的查询 3.线段树的更新单节点 4.线段树的更新区间 直接上完整代码吧 1 #include <bits/stdc++.

区间最小值 线段树 (2015年 JXNU_ACS 算法组暑假第一次周赛)

区间最小值 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 12   Accepted Submission(s) : 5 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 给定一个数字序列,查询随意给定区间内数字的最小值. Input

区间最小值(2) (线段树 更新区间)2015年 JXNU_ACS 算法组暑假第一次周赛

区间最小值(2) Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 26   Accepted Submission(s) : 9 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 给定一个数字序列以及一些操作,查询任意给定区间内数字的最小

每天刷个算法题20160522:支持各种类型的并查集

版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/51524671 为了防止思维僵化,每天刷个算法题.已经刷了几天了,现在发点代码. 我已经建了一个开源项目,每天的题目都在里面: https://github.com/Xiaofei-it/Algorithms 绝大部分算法都是我自己写的,没有参考网上通用代码.读者可能会觉得有的代码晦涩难懂,因为那是我自己的理解. 最近几天都是在写一些原来的东西

每天刷个算法题20160521:二叉树高度(递归与非递归)

版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/51502727 为了防止思维僵化,每天刷个算法题.已经刷了几天了,现在发点代码. 我已经建了一个开源项目,每天的题目都在里面: https://github.com/Xiaofei-it/Algorithms 绝大部分算法都是我自己写的,没有参考网上通用代码.读者可能会觉得有的代码晦涩难懂,因为那是我自己的理解. 最近几天都是在写一些原来的东西

每天刷个算法题20160518:非递归二叉树遍历

版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/51502254 为了防止思维僵化,每天刷个算法题.已经刷了几天了,现在贴点代码. 2002年我初中二年级,开始学习BASIC语言.2004年中考之后,开始参加NOIP,系统学习算法.一直非常喜欢算法,但工作后几乎不再碰这些东西.现在准备重新捡起来. 我已经建了一个开源项目,每天的题目都在里面: https://github.com/Xiaofe

每天刷个算法题20160524:阿克曼函数的递归转非递归解法

版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/51524754 为了防止思维僵化,每天刷个算法题.已经刷了几天了,现在发点代码. 我已经建了一个开源项目,每天的题目都在里面: https://github.com/Xiaofei-it/Algorithms 绝大部分算法都是我自己写的,没有参考网上通用代码.读者可能会觉得有的代码晦涩难懂,因为那是我自己的理解. 最近几天都是在写一些原来的东西

每天刷个算法题20160523:骑士巡游的递归转非递归解法

版权所有.所有权利保留. 欢迎转载,转载时请注明出处: http://blog.csdn.net/xiaofei_it/article/details/51524728 为了防止思维僵化,每天刷个算法题.已经刷了几天了,现在发点代码. 我已经建了一个开源项目,每天的题目都在里面: https://github.com/Xiaofei-it/Algorithms 绝大部分算法都是我自己写的,没有参考网上通用代码.读者可能会觉得有的代码晦涩难懂,因为那是我自己的理解. 最近几天都是在写一些原来的东西