hihoCoder #1068 : RMQ-ST算法(模板)
| AC | G++ | 826ms | 146MB |
思路:
时间复杂度O(nlogn)。
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <set>
#include <deque>
#include <map>
#include <algorithm>
#include <vector>
#include <iostream>
#define max(X,Y) ((X) > (Y) ? (X) : (Y))
#define min(X,Y) ((X) < (Y) ? (X) : (Y))
#define pii pair<int,int>
#define back que[rear-1]
#define INF 0x3f3f3f3f
#define LL long long
#define ULL unsigned long long
using namespace std;
const double PI = acos(-1.0);
const int N=1e6+;
int a[N];
struct ST
{
int st[N][];
void init(int a[],int n) //注意a的下标
{
for(int i=; i<=n; i++) st[i][]=a[i];
for(int q=; (<<q)<=n; q++) //以(1<<i)为距离
for(int j=; j+(<<q)-<=n; j++) //枚举起点
st[j][q]=min(st[j][q-], st[j+(<<q-)][q-]);
}
int query(int L,int R)
{
int len=R-L+;
for(int i=; i>=; i--)//这里可以预处理
{
if( (len>>i)& )
{
return min(st[L][i], st[R-(<<i)+][i]);
}
} }
}st; int main()
{
//freopen("input.txt", "r", stdin);
int n, m, L, R;scanf("%d",&n);
for(int i=; i<=n; i++) scanf("%d",&a[i]);
st.init(a,n); scanf("%d",&m);
while(m--)
{
scanf("%d%d",&L,&R);
printf("%d\n", st.query(L,R));
}
return ;
}
AC代码
用模板重打了一次。
#include <bits/stdc++.h>
using namespace std;
const int N=;
int w[N], pre[N][], n, q;
void pre_cal()
{
for(int i=; i<n; i++) pre[i][]=w[i];
for(int i=,q=; i<=n; i*=,q++)
for(int j=; j<n; j++)
if(j+i-<n) pre[j][q]=min(pre[j][q-],pre[j+i/][q-]);
else break;
}
int main()
{
//freopen("input.txt", "r", stdin);
cin>>n;
for(int i=; i<n; i++) scanf("%d",&w[i]); //输入重量
pre_cal(); //预处理 cin>>q;
int L, R;
for(int i=; i<q; i++) //输入查询,并直接处理输出
{
scanf("%d%d", &L, &R);
int len=R-L+, tmp=, cnt=; for(int i=; i<; i++)//找出二进制最高位的1
{
if(!(len>>i))
{
tmp=((len>>(i-))<<(i-));
break;
}
cnt++;
}
if(R==L) printf("%d\n",w[L-]);
else if(tmp==len) printf("%d\n",pre[L-][cnt-]);//这步其实可省。
else printf("%d\n",min(pre[L-][cnt-], pre[R-tmp][cnt-]));
}
return ;
}
AC代码
hihoCoder #1068 : RMQ-ST算法(模板)的更多相关文章
- HDU 3183 - A Magic Lamp - [RMQ][ST算法]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 Problem DescriptionKiki likes traveling. One day ...
- RMQ之ST算法模板
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; ; ],M ...
- 求解区间最值 - RMQ - ST 算法介绍
解析 ST 算法是 RMQ(Range Minimum/Maximum Query)中一个很经典的算法,它天生用来求得一个区间的最值,但却不能维护最值,也就是说,过程中不能改变区间中的某个元素的值.O ...
- [POJ3264]Balanced Lineup(RMQ, ST算法)
题目链接:http://poj.org/problem?id=3264 典型RMQ,这道题被我鞭尸了三遍也是醉了…这回用新学的st算法. st算法本身是一个区间dp,利用的性质就是相邻两个区间的最值的 ...
- 【原创】RMQ - ST算法详解
ST算法: ID数组下标: 1 2 3 4 5 6 7 8 9 ID数组元素: 5 7 3 1 4 8 2 9 8 1.ST算法作 ...
- POJ 3264 Balanced Lineup RMQ ST算法
题意:有n头牛,编号从1到n,每头牛的身高已知.现有q次询问,每次询问给出a,b两个数.要求给出编号在a与b之间牛身高的最大值与最小值之差. 思路:标准的RMQ问题. RMQ问题是求给定区间内的最值问 ...
- 关于基础RMQ——ST算法
RMQ,Range Maximum/Minimum Query,顾名思义,就是询问某个区间内的最大值或最小值,今天我主要记录的是其求解方法--ST算法 相对于线段树,它的运行速度会快很多,可以做到O( ...
- RMQ st算法 区间最值模板
#include<bits/stdc++.h> ; ; int f[N][Logn],a[N],lg[N],n,m; int main(){ cin>>n>>m; ...
- rmq的st算法模板题 nyoj 119
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...
- POJ 3368 Frequent values RMQ ST算法/线段树
Frequent values Time Limit: 2000MS Memory Lim ...
随机推荐
- 管理SSIS 日志
转自:http://www.cnblogs.com/biwork/p/biworklog.html 一直准备写这么一篇有关 SSIS 日志系统的文章,但是发现很难一次写的很完整.因为这篇文章的内容可扩 ...
- Ubuntu下对与rtl8723be网卡频繁断网问题解决
linux下对于rtl系列的无线网卡,大多数网友都在吐槽,总是频繁的掉网,就此将自己在网上安装时的经验写下. 1.下载网卡驱动,其中包含rtl的大多数包 sudo apt-get install li ...
- 安装APK时SO库的选择策略
此文已由作者尹彬彬授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 0X0 前言 在Android系统中,当我们安装apk文件的时候,lib目录下的so文件会被解压到app的原 ...
- iOS 中使用 MJExtension 遇到 关键字(id) 怎么办
MJExtension 是个人比较喜欢用的json 转model 的软件,当遇到系统关键字时就会出现崩溃,解决方式如下 1.建立Modle 解析类,服务返回数据中带有id,这个时候用字典转Mode(m ...
- css控制页面文字不能被选中user-select:none;
现象:html中可能有些地方不想让用户复制文字,或是用a标签做了个点击按钮,点快的时候文字会被选中,很丑,这个时候可以使用下面的方案禁止文字选中. 原因:鼠标点快了文字会被选中. 解决方案:不同的浏览 ...
- 选择Go语言的12个理由
编者按:多核化和集群化是互联网时代的典型特征,那语言需要哪些特性来应对这些特征呢?多数语言在语法层面并不直接支持协程,而通过库的方式支持的协程的功能也并不完整,比如仅仅提供协程的创建.销毁与切换等能力 ...
- bzoj 3158: 千钧一发【最小割】
这个条件非常妙啊,奇数和奇数一定满足1,因为\( (2a+1)^2+(2b+1)^2=4a^2+4a+4b^2+4b+2=2(2(a^2+a+b^2+b)+1) \)里面这个一定不是平方数因为除二后是 ...
- P5135 painting(组合数)
传送门 如果\(op==1\),那么每一个方案都可以看做从\(n\)个数里选出\(m\)个数,然后\(sort\)一下依次放到每列,方案数就是\({n\choose m}\).因为\(n\)很大,但是 ...
- [Xcode 实际操作]二、视图与手势-(8)UIView视图的纹理填充
目录:[Swift]Xcode实际操作 本文将演示将导入的图片作为纹理,平铺整个屏幕. 往项目中导入一张图片. 点击底部左下角的图标->[Import]->选择需要导入的图片->[O ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie技术原理
Cookie使用HTTPHeader传递数据.Cookie机制定义了两种报头,Set-Cookie报头和Cookie报头.Set-Cookie报头包含于Web服务器的响应头(ResponseHeade ...