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算法(模板)的更多相关文章

  1. HDU 3183 - A Magic Lamp - [RMQ][ST算法]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 Problem DescriptionKiki likes traveling. One day ...

  2. RMQ之ST算法模板

    #include<stdio.h> #include<string.h> #include<iostream> using namespace std; ; ],M ...

  3. 求解区间最值 - RMQ - ST 算法介绍

    解析 ST 算法是 RMQ(Range Minimum/Maximum Query)中一个很经典的算法,它天生用来求得一个区间的最值,但却不能维护最值,也就是说,过程中不能改变区间中的某个元素的值.O ...

  4. [POJ3264]Balanced Lineup(RMQ, ST算法)

    题目链接:http://poj.org/problem?id=3264 典型RMQ,这道题被我鞭尸了三遍也是醉了…这回用新学的st算法. st算法本身是一个区间dp,利用的性质就是相邻两个区间的最值的 ...

  5. 【原创】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算法作 ...

  6. POJ 3264 Balanced Lineup RMQ ST算法

    题意:有n头牛,编号从1到n,每头牛的身高已知.现有q次询问,每次询问给出a,b两个数.要求给出编号在a与b之间牛身高的最大值与最小值之差. 思路:标准的RMQ问题. RMQ问题是求给定区间内的最值问 ...

  7. 关于基础RMQ——ST算法

    RMQ,Range Maximum/Minimum Query,顾名思义,就是询问某个区间内的最大值或最小值,今天我主要记录的是其求解方法--ST算法 相对于线段树,它的运行速度会快很多,可以做到O( ...

  8. RMQ st算法 区间最值模板

    #include<bits/stdc++.h> ; ; int f[N][Logn],a[N],lg[N],n,m; int main(){ cin>>n>>m; ...

  9. rmq的st算法模板题 nyoj 119

    士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比 ...

  10. POJ 3368 Frequent values RMQ ST算法/线段树

                                                         Frequent values Time Limit: 2000MS   Memory Lim ...

随机推荐

  1. js页面的全屏展示和退出全屏显示

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  2. 一个C#开发者重温C++的心路历程

    不知道为什么,似乎很多人理解跑偏了,在这里我要说明一下. 首先,我并没有对C++语言有偏见,我只是单纯的在学习时,在理解时,对C++语言进行一些吐槽,我相信,很多学习C++的人,也会有类似的吐槽. 其 ...

  3. Java文件输入输出

    public static void FileIO(String filename){ FileInputStream fis = null; try { fis = new FileInputStr ...

  4. 201621123016《Java程序设计》第二周学习总结

    1. 本周学习总结 1.本周学习重点: 字符串常量池:这是java中为减少字符串的建立而设计的,在没有使用new构建字符串时,jvm会从字符串常量池查找其值,如果没有则会创建这个字符串再把其放在字符串 ...

  5. 64位Win7中7zip无法关联文件的问题

    问题1:win7x64中安装了7zip,在解压文件右键打开无法关联文件. 解决方法1:在开始菜单中打开7-zip File Manage->工具 ->选项 ->7-zip 勾选“添加 ...

  6. CSS小技巧收藏

    居中对齐 很多时候我们需要把一个元素在其父级容器里水平.垂直居中对齐.以下我列出了常用的几种方法: 1.在知道子元素宽度与高度的情况下进行居中,采用位置定位:absolute + margin .pa ...

  7. 着色语言(Shader Language)

    摘抄"GPU Programming And Cg Language Primer 1rd Edition" 中文名"GPU编程与CG语言之阳春白雪下里巴人" ...

  8. PyCharm的一些使用技巧

    定位到函数定义 在函数名处 Ctrl + B 就会快速定位到函数定义处 在Console中执行文件 全选内容后,右键菜单 Execute Selection in Console 或者快捷键 Alt ...

  9. 进击python第二篇:初识

    入门拾遗 模块 模块用以导入python增强其功能扩展 1.使用 import [模块名] 导入,应用方式:模块. 函数,例: >>> import math >>> ...

  10. 洛谷P3723 [AH2017/HNOI2017]礼物(FFT)

    传送门 首先,两个数同时增加自然数值相当于只有其中一个数增加(此增加量可以小于0) 我们令$x$为当前的增加量,${a},{b}$分别为旋转后的两个数列,那么$$ans=\sum_{i=1}^n(a_ ...