poj 3264 Balanced Lineup
来源:互联网 发布:可视化编程软件 编辑:程序博客网 时间:2024/06/11 03:27
题目链接:Balanced Lineup
题目大意:给定区间,求区间最大值和最小值的差值
题目思路:因为是单纯的查询区间最值,直接RMQ就好了
#include <map>#include <set>#include <queue>#include <stack>#include <cmath>#include <vector>#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>#define pb push_backusing namespace std;typedef long long ll;const int maxn = 5e4+10;int N,Q,a[maxn];int dpmax[maxn][20],dpmin[maxn][20];void init_RMQ(){ int l = (int)(log(N)/log(2.0)); for(int i = 1;i <= N;i++) dpmax[i][0] = dpmin[i][0] = a[i]; for(int j = 1;j <= l;j++){ for(int i = 1;i+(1<<j)-1 <= N;i++){ dpmax[i][j] = max(dpmax[i][j-1],dpmax[i+(1<<(j-1))][j-1]); dpmin[i][j] = min(dpmin[i][j-1],dpmin[i+(1<<(j-1))][j-1]); } }}int RMQMax(int l,int r){ int k = (int)(log(r-l+1)/log(2.0)); return max(dpmax[l][k],dpmax[r-(1<<k)+1][k]);}int RMQMin(int l,int r){ int k = (int)((log(r-l+1))/(log(2.0))); return min(dpmin[l][k],dpmin[r-(1<<k)+1][k]);}int main(){ while(~scanf("%d%d",&N,&Q)){ for(int i = 1;i <= N;i++) scanf("%d",&a[i]); init_RMQ(); while(Q--){ int l,r; scanf("%d%d",&l,&r); printf("%d\n",RMQMax(l,r)-RMQMin(l,r)); } } return 0;}
阅读全文
0 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
- js判断数字是否为整数
- android 开机流程详细分析
- 神创造了致病的病毒吗?
- android aspectj 配置
- 字符串去除空格回车以及随机生成中英文字符串
- poj 3264 Balanced Lineup
- windows和linux环境下java调用C++代码-JNI技术
- 【LeetCode】Min Stack带最小值操作的栈
- 乐趣:初识React
- domElement.appendChild is not a function
- 628. Maximum Product of Three Numbers
- [BZOJ3124][Sdoi2013]直径(树形dp)
- PAT basic 1066 图像过滤(15)
- 1001. 害死人不偿命的(3n+1)猜想 (15)