RMQ(非log2储存方法)
2016-03-31
RMQ |
难度级别:B; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B |
试题描述 |
长度为n的数列A,以及q个询问,每次询问一段区间的最小值。 |
输入 |
第一行,一个整数n |
输出 |
针对每个询问,输出结果。每个结果占一行。 |
输入示例 |
5 |
输出示例 |
2 |
其他说明 |
数据规模:n, q, Ai<=100000 |
代码:
#include<iostream> #include<cmath> #include<math.h> using namespace std; int ty(int a)//求2的a次方 { int k=; for(int i=;i<a;i++) k*=; return k; } int f[][],a[]; /* f[101][101]列表 例如:数组a如下 2 1 5 4 7 1 2 1 5 4 7 2 1 1 4 4 7 3 1 1 4 4 7 4 1 1 4 4 7 5 1 1 4 4 7 */ int main() { int i , j , k , n , x , y; cin>>n; //输入 for(i=;i<=n;i++)ci n>>a[i],f[][i]=a[i]; cin>>x>>y; for(i=;i<=y-x;i++)//求解 { for(j=;j<=n;j++) {//控制,如果“j+ty(i-1)>n”就超界了。 if(j+ty(i-)>n)f[i][j]=min(f[i/][j],f[i/][j+i/]); else f[i][j]=min(f[i-][j],f[i-][j+ty(i-)]); //cout<<f[i][j]<<" "; } //cout<<endl; } cout<<f[y-x][x];//输出 system(“pause”); }
代码分析:
例如:数组a[]={2 1 5 4 7};
因此可以列表如下:
1. 2(从第1个元素长度为1区间的最小值)
2. 1(从第2个元素长度为1区间的最小值)
3. 5(从第3个元素长度为1区间的最小值)
4. 4(从第4个元素长度为1区间的最小值)
5. 7(从第5个元素长度为1区间的最小值);
1. 1(从第1个元素长度为2区间的最小值)
2. 1(从第2个元素长度为2区间的最小值)
3. 4(从第3个元素长度为2区间的最小值)
4. 4(从第4个元素长度为2区间的最小值)
5. 7(从第5个元素长度为2区间的最小值)
1. 1(从第1个元素长度为3区间的最小值)
2. 1(从第2个元素长度为3区间的最小值)
3. 4(从第3个元素长度为3区间的最小值)
4. 4(从第4个元素长度为3区间的最小值)
5. 7(从第5个元素长度为3区间的最小值)
.
.
.
可以得出公式: min(f[i-1][j],f[i-1][j+ty(i-1)]);
但如果这个公式超界了得出的结果可以为0,有些数据就会结果错误。所以,要加一个判断,如果j+ty(i-1)>n就要利用f[i][j]=min(f[i/2][j],f[i/2][j+i/2]);来求f[i][j]的结果。最后要输出f[y-x][x],
代表从数组的下标为x的元素y-x中最小的元素的值。
RMQ(非log2储存方法)的更多相关文章
- RMQ(log2储存方法)
RMQ 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 长度为n的数列A,以及q个询问,每次询问一段区间的最小值. 输入 第一 ...
- CSharpGL(36)通用的非托管数组排序方法
CSharpGL(36)通用的非托管数组排序方法 如果OpenGL要渲染半透明物体,一个方法是根据顶点到窗口的距离排序,按照从远到近的顺序依次渲染.所以本篇介绍对 UnmanagedArray< ...
- MVC 如何在一个同步方法(非async)方法中等待async方法
MVC 如何在一个同步方法(非async)方法中等待async方法 问题 首先,在ASP.NET MVC 环境下对async返回的Task执行Wait()会导致线程死锁.例: public Actio ...
- C# 非public的方法和属性的单元测试
有时候我们写好的类库中,某些类的属性和方法不应该暴露出来,那么如何对这些非public的方法和属性进行单元测试? MS为我们提供了PrivateObject类,可以解决这个问题,可以去MSDN的说明文 ...
- iphone app的非appstore发布方法及其免越狱安装方法
iphone app的非appstore发布方法及其免越狱安装方法 本文包含两项内容, 1.开发者如何将app导出为可供普通用户在外部安装的ipa文件. 2.用户使用itools来安装ipa格式的 ...
- python深浅拷贝以及数据在内存中储存方法
要搞懂深浅拷贝,首先要明白数据在内存里的储存方法. 一个变量的储存,首先是变量名加上储存内容的ID,通过ID去找到变量名所对应的内容, 当我们对数据进行赋值时,其实是把内容的整体地址赋给别的变量名(相 ...
- eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?
eclipse 中main()函数中的String[] args如何使用? 右击你的项目,选择run as中选择 run configuration,选择arguments总的program argu ...
- OpenFOAM——设置非均匀边界方法总结
在使用OpenFOAM求解的时候我们经常需要设置非均匀的边界,比如我们在计算层流的时候,很多时候需要入口为充分发展的入口边界,下面我们就以入口处为充分发展的层流速度分布为总结OpenFOAM当中设定不 ...
- Xcode 的ARC转化功能以及跟非ARC共存方法
1.ARC工程跟非ARC文件的共存方法: 在工程中选择 Build Phases 然后选择Compile Sources 里面,找到需要共存的非ARC文件,然后按Enter键,在弹出的窗口中填入:-f ...
随机推荐
- 2014-4-25 运行号:837344 ASCII码排序
#include <iostream> #include <cstdio> #include <cstdlib> #include <string> # ...
- Intervals---poj1201(差分约束系统)
题目链接:http://poj.org/problem?id=1201 题目说[ai, bi]区间内和点集Z至少有ci个共同元素,那也就是说如果我用Si表示区间[0,i]区间内至少有多少个元素的话,那 ...
- 在CentOS6.5上安装Tomcat7
Tomcat大本营地址:http://tomcat.apache.org/ 本文使用到的Tomcat7下载地址:http://apache.opencas.org/tomcat/tomcat-7/v7 ...
- 终于有人把P2P、P2C、O2O、B2C、B2B、C2C 的区别讲透了
http://news.mbalib.com/story/88506 P2P.P2C .O2O .B2C.B2B. C2C,每天看着这些常见又陌生的名词,如果有人跟你说让你解释它的含义,金融的小伙伴们 ...
- 怎么使用git来管理项目版本?
怎么使用git来管理项目版本和存放代码? 作者:rongfangliu 转载请注明出处:http://www.cnblogs.com/rongfangliu/p/howuseGit.html 工具: ...
- iOS企业开发plist安装包实现
第一步: 在使用MACBOOK导出ipa的时候,我们得到ipa的同时,还得到一份plist文件 看到我们导出的plist,需要注意的地方有两个已经用中文标注. 一个是URL,一个是bundle-ide ...
- 新增WiFi真机同步与实时预览功能 简化真机调试步骤
APICloud工具插件为开发者提供iOS和Android平台真机同步调试功能,不仅可以通过USB方式进行APP真机同步功能,更新增WiFi真机同步和WiFi真机实时预览两大功能,方便开发者在开发过程 ...
- Ubuntu 上安装 Freemind 并支持中文
Ubuntu 上安装 Freemind 并支持中文 JAVA 运行时 Freemind 是一个使用 Java 编写的思维导图工具,在安装时,需要到 Java 运行时(使用 OpenJRE 或 Orac ...
- Android --ListView分页
参考博客:Android ListView分页加载(服务端+android端)Demo 监听OnScrollListener事件 class OnListScrollListener implemen ...
- 重写NSLog,Debug模式下打印日志和当前行数
在pch文件中加入以下命令,NSLog在真机测试中就不会打印了 //重写NSLog,Debug模式下打印日志和当前行数 #if DEBUG #define NSLog(FORMAT, ...) fpr ...