qduoj Water problem
water problem
发布时间: 2015年10月10日 15:34 时间限制: 1000ms 内存限制: 256M
题意很简单
给你N个数, Q个查询
每次查询给你一个区间[L, R]
你要找出 [L, R] 这个区间里面取模M后的最大值。
第一行一个T,表示测试数据组数。 第二行两个整数N, M (1<=N<=10^5, 1<=M<=10^9)。 第三行给你N个整数 整数范围在1到10^9之间。 第四行给你一个整数Q. ( 1<=Q<=10^5) 下面Q行, 每一行对应两个整数L, R (1<=L<=R<10^9)
每一行对应一个询问的答案。
1 5 3 4 2 2 3 5 2 1 3 4 5
2 2
//RMQ区间最值查询问题 时间复杂度:O(NlogN)~O(Q)(预处理NlogN,每次查询O(1);
//预处理:DP思想F[i,j]代表从i开始长度为2^j的区间最值,也就是i到i+2^j-1区间最值,
//每次求f[i,j](i~i+2^j-1),把这个区间分为两个区间长度小的i~i+2^(j-1)-1(也就是f[i][j-1])和i+2^(j-1)~j (f[i+2^(j-1)][j])
//不断用小区间得到大区间
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int f[100005][21],n,m,a;
int main()
{int i,j,t,q,k,maxnum,x1,x2;scanf("%d",&t);while(t--){scanf("%d %d",&n,&m);for(i=1;i<=n;i++){scanf("%d",&a);a%=m;f[i][0]=a;//赋初值,f[i][0]代表从i开始长度为2^0=1区间的最值,其实也就是i; }for(j=1;j<20;j++)// j循环放在外面,因为如果j放在里面,往下走的时候是按开始元素(i1)为先,//一步一步求i1开始长度为2^(1,2,3,...)区间最值,肯定求不出来,//所以j循环在外,i循环在里,以区间长度为先,不断递进往下找开始元素不同的区间直到找的范围超过n//这样就从区间长度为1,找到区间长度为2,4,8,依次增大 {for(i=1;i<=n;i++){if(i+(1<<(j-1))<=n)f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);//注:1<<k==2^k,运算速度快,<<优先级比+-低,所以要用括号eg:5-1<<2==4*2*2 5-(1<<2)==5-4 }} /*for(i=1;i<=n;i++){for(j=0;j<20;j++)printf("%d ",f[i][j]);printf("\n");}*/scanf("%d",&q);while(q--){scanf("%d %d",&x1,&x2);k=(int)(log(x2-x1+1)/log(2));//查询时k=log2(x2-x1+1),x2-x1+1是区间长度,以2为底求k为了方便数组下标表示//把要查询的区间分成两段,一段是x1~x1+2^k-1和x2-2^k~x2,这两段会有重复的部分,但没关系 // printf("%d\n",k);maxnum=max(f[x1][k],f[x2-(1<<k)+1][k]);printf("%d\n",maxnum);} }return 0;
}
qduoj Water problem相关推荐
- hdu-5867 Water problem(水题)
题目链接: Water problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- hdu 5443 The Water Problem 线段树
The Water Problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- 模拟【The Biggest Water Problem】+模拟【明明的随机数】
1.The Biggest Water Problem 题目描述 给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话,就继续让他变身...直到满足条件为止. 巴啦啦 ...
- 2018年全国多校算法寒假训练营练习比赛(第五场)题解 F The Biggest Water Problem
The Biggest Water Problem 链接:https://www.now coder.com/acm/contest/77/F 来源:牛客网 时间限制:C/C++ 1秒,其他语言2 ...
- DUToj1085 Water Problem(矩阵快速幂)
Problem I: Water Problem Time Limit:3000/1000 MS (Java/Others) Memory Limit:163840/131072 KB (Java ...
- NC15173 The Biggest Water Problem
题目: NC15173 The Biggest Water Problem ,哈哈,我们今天来看一道非常简单的题,这是选自牛客上的一道题,好了,我们一起来看看题意吧: 题目描述是复制的,可能有部分显示 ...
- 题解 | The Biggest Water Problem
字节 字节2024年校园招聘内推开始啦,快来投递你心仪的职位吧校招投递链接: https://jobs.bytedance.com/campus/position?r 百度2024测开二面 自我介绍项 ...
- The Biggest Water Problem(水题)
链接:https://ac.nowcoder.com/acm/problem/15173 来源:牛客网 题目描述 给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话 ...
- CSU - 2059 Water Problem(Z线分割平面)
一条'Z'形线可以将平面分为两个区域,那么由N条Z形线所定义的区域的最大个数是多少呢?每条Z形线由两条平行的无限半直线和一条直线段组成 Input 首先输入一个数字T(T<100),代表有T次询 ...
最新文章
- 简述sed、grep和parted的速查表
- 电气实现:蒙特卡洛法 模拟多台电动汽车有序充放电负荷和(python实现)
- 35 岁程序员的独家面试经历
- 第一百一十八期:运行 JavaScript 代码片段的 20 种工具
- vs2003 局部友元访问私有不可访问_C++ 类:重载运算符与友元
- GOF23种设计模式
- python 函数图解_Python函数说明(一)
- 49. NAT 服务器
- C语言 简单走迷宫小游戏
- [Vulfocus解题系列] 所复现漏洞总结
- ICCV 2021 | 2D和3D通用!港大提出PCRL:新医疗影像自监督SOTA!
- linux中负载值为多少正常_Linux系统Load average负载详细解释
- 单点登录、统一认证解决方案(一)
- asp.net Listbox控件用法
- mendeley中如何重复引用同一篇参考文献_科研小白如何高效阅读下载的文献/论文,怎么样做笔记?给大家安利几种工具和方法!赶快收藏起来...
- kubectl命令行管理工具
- SK6# 上海居转户随记
- 22岁90后白羊座罗生和勒索病毒的背后故事
- 山穷水复疑无路?柳暗花明又一村|转行软件测试月薪12K
- 基于MSP430f5529 编码电机测速 接收脉冲数 PWM调速 CCS编译器 代码分析
热门文章
- android删除短信记录,android 4.4 以上删除短信的方法
- 抛弃ACDSee Windows Live照片库体验(转)
- 人际关系处理文库 怎样与女人相处 怎样与领导相处 张胜利 岳贵安著 PDF 网盘免费...
- python与会计的论文_python计算与编程实践论文范文 有关西安交通大学软件学院软件工程硕士研究生毕业论文写作资料...
- flipclock开发手册_FlipClock
- python输入x的值求y_python – 机器学习 – 如何使用过去的20行作为每个Y值的X输入...
- 解决mysql affected rows error: 2
- FastAPI 的路由介绍及使用
- 【JavaScript高级】ES7-ES13常用新特性
- C语言库函数所在目录,C语言库函数函数名 带目录+索引.doc