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 复制

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

样例输出1

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相关推荐

  1. hdu-5867 Water problem(水题)

    题目链接: Water problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  2. hdu 5443 The Water Problem 线段树

    The Water Problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  3. 模拟【The Biggest Water Problem】+模拟【明明的随机数】

    1.The Biggest Water Problem 题目描述 给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话,就继续让他变身...直到满足条件为止. 巴啦啦 ...

  4. 2018年全国多校算法寒假训练营练习比赛(第五场)题解 F The Biggest Water Problem

    The Biggest Water Problem 链接:https://www.now   coder.com/acm/contest/77/F 来源:牛客网 时间限制:C/C++ 1秒,其他语言2 ...

  5. DUToj1085 Water Problem(矩阵快速幂)

    Problem I: Water Problem Time Limit:3000/1000 MS (Java/Others)   Memory Limit:163840/131072 KB (Java ...

  6. NC15173 The Biggest Water Problem

    题目: NC15173 The Biggest Water Problem ,哈哈,我们今天来看一道非常简单的题,这是选自牛客上的一道题,好了,我们一起来看看题意吧: 题目描述是复制的,可能有部分显示 ...

  7. 题解 | The Biggest Water Problem

    字节 字节2024年校园招聘内推开始啦,快来投递你心仪的职位吧校招投递链接: https://jobs.bytedance.com/campus/position?r 百度2024测开二面 自我介绍项 ...

  8. The Biggest Water Problem(水题)

    链接:https://ac.nowcoder.com/acm/problem/15173 来源:牛客网 题目描述 给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话 ...

  9. CSU - 2059 Water Problem(Z线分割平面)

    一条'Z'形线可以将平面分为两个区域,那么由N条Z形线所定义的区域的最大个数是多少呢?每条Z形线由两条平行的无限半直线和一条直线段组成 Input 首先输入一个数字T(T<100),代表有T次询 ...

最新文章

  1. 简述sed、grep和parted的速查表
  2. 电气实现:蒙特卡洛法 模拟多台电动汽车有序充放电负荷和(python实现)
  3. 35 岁程序员的独家面试经历
  4. 第一百一十八期:运行 JavaScript 代码片段的 20 种工具
  5. vs2003 局部友元访问私有不可访问_C++ 类:重载运算符与友元
  6. GOF23种设计模式
  7. python 函数图解_Python函数说明(一)
  8. 49. NAT 服务器
  9. C语言 简单走迷宫小游戏
  10. [Vulfocus解题系列] 所复现漏洞总结
  11. ICCV 2021 | 2D和3D通用!港大提出PCRL:新医疗影像自监督SOTA!
  12. linux中负载值为多少正常_Linux系统Load average负载详细解释
  13. 单点登录、统一认证解决方案(一)
  14. asp.net Listbox控件用法
  15. mendeley中如何重复引用同一篇参考文献_科研小白如何高效阅读下载的文献/论文,怎么样做笔记?给大家安利几种工具和方法!赶快收藏起来...
  16. kubectl命令行管理工具
  17. SK6# 上海居转户随记
  18. 22岁90后白羊座罗生和勒索病毒的背后故事
  19. 山穷水复疑无路?柳暗花明又一村|转行软件测试月薪12K
  20. 基于MSP430f5529 编码电机测速 接收脉冲数 PWM调速 CCS编译器 代码分析

热门文章

  1. android删除短信记录,android 4.4 以上删除短信的方法
  2. 抛弃ACDSee Windows Live照片库体验(转)
  3. 人际关系处理文库 怎样与女人相处 怎样与领导相处 张胜利 岳贵安著 PDF 网盘免费...
  4. python与会计的论文_python计算与编程实践论文范文 有关西安交通大学软件学院软件工程硕士研究生毕业论文写作资料...
  5. flipclock开发手册_FlipClock
  6. python输入x的值求y_python – 机器学习 – 如何使用过去的20行作为每个Y值的X输入...
  7. 解决mysql affected rows error: 2
  8. FastAPI 的路由介绍及使用
  9. 【JavaScript高级】ES7-ES13常用新特性
  10. C语言库函数所在目录,C语言库函数函数名 带目录+索引.doc