Poj 3264 Balanced Lineup
来源:互联网 发布:淘宝店铺店标怎么弄的 编辑:程序博客网 时间:2024/05/16 18:52
题目大意:有一排牛,给定每头牛的高度,然后有一系列的询问,即给出i,j,要求输出第i个牛和第j个牛之间的最高的牛和最矮的牛之间高度差值。
思路:典型的区间最值查询,获取最大值和最小值后相减即可。
#include <stdio.h>#include <math.h>int n,q;#define MAXN 50010int dp_max[MAXN][20];int dp_min[MAXN][20];int num[MAXN];//存储数据信息,从0到n-1int get_max(int a, int b) {if (a>b)return a;return b;}int get_min(int a, int b) {if (a>b)return b;return a;}void RMQ_preproccess() {int i,j;for (i=0;i<n;i++) {dp_max[i][0]=num[i];dp_min[i][0]=num[i];}for (j=1;(1<<j)<=n;j++) {for (i=0;i+(1<<j)-1<n;i++) {dp_max[i][j]=get_max(dp_max[i][j-1],dp_max[i+(1<<(j-1))][j-1]);dp_min[i][j]=get_min(dp_min[i][j-1],dp_min[i+(1<<(j-1))][j-1]);}}}int RMQ_max(int s, int v) {int k=(int)(log((v-s+1)*1.0)/log(2.0)); return get_max(dp_max[s][k],dp_max[v-(1<<k)+1][k]);}int RMQ_min(int s, int v) {int k=(int)(log((v-s+1)*1.0)/log(2.0)); return get_min(dp_min[s][k],dp_min[v-(1<<k)+1][k]);}int main(){int i;int s,v;scanf("%d%d",&n,&q);for (i=0;i<n;i++)scanf("%d",&num[i]);RMQ_preproccess();for (i=0;i<q;i++) {scanf("%d%d",&s,&v);s--;v--;printf("%d\n",RMQ_max(s,v)-RMQ_min(s,v));}return 0;}
- POJ 3264 Balanced Lineup
- POJ 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- Poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- POJ-3264-Balanced Lineup
- poj 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- POJ 3264-Balanced Lineup
- poj 3264 Balanced Lineup
- POJ 3264 Balanced Lineup
- POJ-3264-Balanced Lineup
- POJ 3264 Balanced Lineup
- POJ 3264 Balanced Lineup
- poj 3264 Balanced Lineup
- Poj 2481 Cows
- POJ 2186 Popular Cows 强连通分量 Kosaraju or tarjan
- 三种博弈简介
- PC与手机同步文本内容
- C++ primer(第四版)读书笔记5
- Poj 3264 Balanced Lineup
- http://www.douban.com/note/152256041/
- Android运行时的错误
- 由 Windows 向 Linux 迁移字体
- 命令处理器模式(Command Processor)的思考
- Android学习笔记之开启导入修复工程
- Java 向上转型和向下转型
- 异常栈展开和对象析构
- 模拟C++11的新关键字decltype