【题目链接】

点击打开链接

【算法】

这是一道经典的最值查询(RMQ)问题。

我们首先想到线段树。但有没有更快的方法呢?对于这类问题,我们可以用ST表(稀疏表)算法求解。

稀疏表算法。其实也是一种动态规划的算法。是先做一遍预处理,然后O(1)求出答案。
        
        设计状态 : f[i][j] 表示从第i个数开始连续2^j次方个数(包括第i个数),中的(最大或最小值)

那么状态转移方程是什么呢?

我们知道 2^j可分解为两个2^(j-1),所以f[i][j] = max或min(f[i][j-1],f[i+2^(j-1)][j-1])

做完预处理,我们又该如何查询呢?

首先我们证明 : 2^log(x) > x / 2

先将x表示为2^i+k的形式,则log(x)=i

得到: 2^i > 2^(i-1) + k / 2
        2^(i-1) > k / 2
        2^i > k

我们知道2^i一定大于k,所以成立。

所以在查询(最大或最小值)时,我们只需找两个长度为2^log(x)的区间求最大最小值就可以了

此题堪称ST表裸题

【代码】

#include<bits/stdc++.h>

using namespace std;

int i,j,N,M,k,x,y;
int a[],f_max[][],f_min[][]; int main() { scanf("%d%d",&N,&M);
for (i = ; i <= N; i++) {
scanf("%d",&a[i]);
f_max[i][] = f_min[i][] = a[i];
} for (i = N; i >= ; i--) {
for (j = ; i + (<<j) - <= N; j++) {
f_max[i][j] = max(f_max[i][j-],f_max[i+(<<(j-))][j-]);
f_min[i][j] = min(f_min[i][j-],f_min[i+(<<(j-))][j-]);
}
} for (i = ; i <= M; i++) {
scanf("%d%d",&x,&y);
k = (int)(log(y - x + ) / log(2.0));
printf("%d\n",max(f_max[x][k],f_max[y-(<<k)+][k]) - min(f_min[x][k],f_min[y-(<<k)+][k]));
} return ; }

【USACO】 Balanced Lineup的更多相关文章

  1. 【USACO】 Balanced Photo

    [题目链接] 点击打开链接 [算法] 树状数组 [代码] #include<bits/stdc++.h> using namespace std; int i,N,ans,l1,l2; ] ...

  2. 【poj3264】 Balanced Lineup

    http://poj.org/problem?id=3264 (题目链接) 题意 给出序列,求区间最大值-最小值 Solution 无修改,询问较多,ST表水一发. ST算法(Sparse Table ...

  3. 【POJ3264】Balanced Lineup(RMQ)

    题意:每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛 ...

  4. POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 【USACO】距离咨询(最近公共祖先)

    POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 [USACO]距离咨询(最近公共祖先) Description F ...

  5. 1642: 【USACO】Payback(还债)

    1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...

  6. 1519: 【USACO】超级书架

    1519: [USACO]超级书架 时间限制: 1 Sec 内存限制: 64 MB 提交: 1735 解决: 891 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 Farmer Jo ...

  7. Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers

    [USACO]1.1.2 贪婪的礼物送礼者 Greedy Gift Givers 题目描述 对于一群要互送礼物的朋友,你要确定每个人送出的礼物比收到的多多少(and vice versa for th ...

  8. 【CPLUSOJ】【USACO】【差分约束】排队(layout)

    [题目描述] Robin喜欢将他的奶牛们排成一队.假设他有N头奶牛,编号为1至N.这些奶牛按照编号大小排列,并且由于它们都很想早点吃饭,于是就很可能出现多头奶牛挤在同一位置的情况(也就是说,如果我们认 ...

  9. 【LeetCode】Balanced Binary Tree 解题报告

    [题目] Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bi ...

随机推荐

  1. windows安装RabbitMQ注意事项

    1.首先下载好ERLANG.RabbitMQ安装包,先安装erlang,设置好环境变量,然后再去安装MQ; 2.别人有两个报错: 一:RabbitMQ安装目录中不允许有空格; 二:安装rabbitmq ...

  2. Java搜索引擎选择: Elasticsearch与Solr(转)

    Elasticsearch简介 Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据. 它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者 ...

  3. Maven打包时过滤测试代码或指定特定的测试类(maven-surefire-plugin)

    1.过滤整个测试代码,可以直接在命令行上指定 mvn clean install -Dmaven.test.skip=true 提示:以上为举例,具体的构建阶段可以自定义,其中maven.test.s ...

  4. 一个炫酷的Actionbar效果

    今天在网上看到一个炫酷的Actionbar效果,一个老外做的DEMO,目前很多流行的app已经加入了这个效果. 当用户初始进入该界面的时候,为一个透明的 ActiionBar ,这样利用充分的空间显示 ...

  5. 33.JAVA编程思想——JAVA IO File类

    33.JAVA编程思想--JAVA IO File类 RandomAccessFile用于包括了已知长度记录的文件.以便我们能用 seek()从一条记录移至还有一条:然后读取或改动那些记录. 各记录的 ...

  6. 【转】C语言中整型运算取Ceiling问题

    原文:http://blog.csdn.net/laciqs/article/details/6662472 --------------------------------------------- ...

  7. 最近遇到的C++数字和字符串的转换问题

    1. 用itoa 和atoi  在头文件#include<cstidlib> itoa用法: char * itoa ( int value, char * str, int base ) ...

  8. SolidEdge 工程图中如何给零件着色 给装配体着色

    点击着色按钮,然后点击更新视图即可.

  9. java utf8字符 导出csv 文件的乱码问题。

    在输出的格式为UTF-8的格式,但是打开CSV文件一直为乱码,后来参考了这里的代码,搞定了乱码问题,原文请参考:http://hbase.iteye.com/blog/1172200 private ...

  10. 安装Sublime配合quick-cocos2d-x开发

    下载地址 Sublime下载地址 安装 Package Control 在Sublime中,按Ctrl+~打开控制台,输入: Sublime Text2 import urllib2,os; pf=' ...