询问任意区间的min,max,gcd,lcm,sum,xor,or,and
给我们n个数,然后有m个询问,每个询问为L,R,询问区间[L,R]的最大最小值,最小公约数,最大公约数,和,异或,或,且
这些问题通通可以用RMQ的思想来解决。
以下用xor来作为例子
设dp[i][j]为以i开头的,长度为2^j的区间的所有值得异或
那么dp[i][j] = dp[i][j-1] xor dp[i+(1<<(j-1))][j-1]
这样,运用动态规划的思想,我们可以在nlogn的时间复杂度内算出以任意点开头的,长度为1,2,4,8...2^j 的区间的异或值。
那么询问任意区间的异或值时,只要将L->R之间的距离用二进制数来表示,那么只需要log(R-L+1)步就能求出所需的询问。
1 #include <stdio.h> 2 #include <string.h> 3 const int N = 100000 + 10; 4 int a[N]; 5 int dp[N][30]; 6 int n; 7 void init() 8 { 9 for(int i=1;i<=n;++i) 10 dp[i][0] = a[i]; 11 for(int j=1;(1<<j)<=n;++j) 12 { 13 for(int i=1;i+(1<<j)-1<=n;++i) 14 { 15 dp[i][j] = dp[i][j-1] ^ dp[i+(1<<(j-1))][j-1]; 16 } 17 } 18 } 19 20 int query(int L, int R) 21 { 22 int ans = 0; 23 int seg = R - L + 1; 24 int tmp = 1, i = 0; 25 while(seg) 26 { 27 if(seg&1) 28 { 29 ans ^= dp[L][i]; 30 L += tmp; 31 } 32 seg>>=1; 33 i++; 34 tmp = tmp * 2; 35 } 36 return ans; 37 } 38 int main() 39 { 40 while(scanf("%d",&n)!=EOF) 41 { 42 for(int i=1;i<=n;++i) 43 scanf("%d",&a[i]); 44 init(); 45 int m,L,R; 46 scanf("%d",&m); 47 while(m--) 48 { 49 scanf("%d%d",&L,&R); 50 printf("%d\n",query(L,R)); 51 } 52 } 53 return 0; 54 }
View Code
同理,以上所说的其他问题同样能够求解。
预处理的时间复杂度是O(nlogn), 每次询问是O(logn)
转载于:https://www.cnblogs.com/justPassBy/p/4836397.html
询问任意区间的min,max,gcd,lcm,sum,xor,or,and相关推荐
- hdu-3071 Gcd Lcm game---质因数分解+状态压缩+线段树
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3071 题目大意: 给定一个长度为n的序列m次操作,操作的种类一共有三种 查询 L :查询一个区间的所 ...
- 将数据归一化到任意区间范围的方法
将数据归一化到任意区间范围的方法 一般常见的数据归一化,是归一化到0~1,或者-1~1的区间,但在一些特殊场合下,我们需要根据实际情况归一化到其他任意区间,方法是: 将数据归一化到[a, ...
- LINQ to SQL语句之 Count/Sum/Min/Max/Avg
Count/Sum/Min/Max/Avg操作符 适用场景:统计数据吧,比如统计一些数据的个数,求和,最小值,最大值,平均数. Count 说明:返回集合中的元素个数,返回INT类型:不延迟.生成SQ ...
- Linq-语句之Select/Distinct和Count/Sum/Min/Max/Avg
上一篇讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ to SQL语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to Data ...
- POJ 2429 GCD LCM Inverse
设答案为ans1,ans2 ans1=a1*gcd,ans2=a2*gcd,a1,a2互质 gcd*a1*b1=lcm,gcd*a2*b2=lcm a1*b1=lcm=(ans1*ans2)/gcd= ...
- [JavaScript] JS求闭区间[min,max]的和
求闭区间[min,max]的和 区间是指一个集合,包含在某两个特定实数之间的所有实数,亦可能同时包含该两个实数. 闭区间[10,20]表示{X|10<=X<=20},包含10和20 开区间 ...
- 10.matlab中sort , min/max以及ceil 函数
1.sort 排序 2.min/max 求最大最小值 3.ceil----向上取整(不进行四舍五入)
- P3175 [HAOI2015]按位或(Min - Max容斥,FMT,概率期望,全网最清晰的题解!)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P3175 Prob ...
- splunk的统计分析功能——特定字段的统计功能包括取值分布(+topK,min/max/平均值)...
特定字段的统计功能--取值分布,topK,min/max/平均值 例如: date_second 60 值, 100% 的事件 时段平均值 时段最大值 时段最小值 上限值 时段上限值 罕见值 具有此字 ...
最新文章
- 【贪心】【P5078】Tweetuzki 爱军训
- android:AlertDialog控件
- ZABBIX3.0配置邮件报警
- 如何在VMware Player中设置和安装Windows Home Server“ Vail”
- Python 数据分析三剑客之 Pandas(一):认识 Pandas 及其 Series、DataFrame 对象
- Android 开源框架 ( 二 ) 基于OkHttp进一步封装的okhttp-utils介绍
- 微信上如何发送GIF动图
- -Android的发展webservice-号码归属地查询
- java paypal开发详解_PayPal 开发详解(六):下载paypal立即付款SDK 并编译打包
- 考研的意义---解读
- hadoop基础----hadoop理论(四)-----hadoop分布式并行计算模型MapReduce详解
- 双柱状图与双折线图混合
- .dwg(sw)-exb
- GDOI2021赛后总结高一赛季总结
- 汉字生成woff字体文件
- mysql如何降级_降级MySQL(参考MySQL官方文档)
- 爬取小猪网的短租房信息
- B/S结构下套打票据实现 - Lodop打印组件
- 读书笔记:多智能体机器学习(二)
- 【人工智能】人工智能起源以来,经过科学工作者们的大量研究与实践,向着体系化、理论化方向发展
热门文章
- centos7设置静态IP地址
- C# List的方法和属性
- Zookeeper 3.6.0启动时 8080端口被占用
- Kotlin入门(22)适配器的简单优化
- Android开发笔记(一百六十)休眠模式下的定时器控制
- linux 判断上一条命令是否指令成功
- 打印出所有的 水仙花数 ,所谓 水仙花数 是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 水仙花数 ,因为153=1的三次方+5的三次方+3的三次方。...
- 为了测试自动驾驶,福特将车带到了一个仿造城市
- 【原创】Oracle RAC原理和安装
- 网页中JS实现(调用)打印预览功能