1636/1699: [Usaco2007 Jan]Balanced Lineup排队
2018-02-23 08:27
423 查看
题目链接
题目大意:RMQ
题解:boy next ♂door
我的收获:233333
题目大意:RMQ
题解:boy next ♂door
我的收获:233333
#include <cstdio> #include <cmath> #include <iostream> using namespace std; #define pow2(x) (1<<(x)) const int M=50005; int n,T,x,y; int a[M],Fmin[M][25],Fmax[M][25]; void max_rmq() { for(int i=1;i<=n;i++) Fmax[i][0]=a[i]; for(int j=1;j<=20;j++) for(int i=1;i+pow2(j)-1<=n;i++) Fmax[i][j]=max(Fmax[i][j-1],Fmax[i+pow2(j-1)][j-1]); } int max_query(int i,int j){ int k=log(j-i+1)/log(2); return max(Fmax[i][k],Fmax[j-pow2(k)+1][k]); } void min_rmq() { for(int i=1;i<=n;i++) Fmin[i][0]=a[i]; for(int j=1;j<=20;j++) for(int i=1;i+pow2(j)-1<=n;i++) Fmin[i][j]=min(Fmin[i][j-1],Fmin[i+pow2(j-1)][j-1]); } int min_query(int i,int j){ int k=log(j-i+1)/log(2); return min(Fmin[i][k],Fmin[j-pow2(k)+1][k]); } int main() { cin>>n>>T; for(int i=1;i<=n;i++) scanf("%d",&a[i]); min_rmq(); max_rmq(); while(T--) { scanf("%d%d",&x,&y); printf("%d\n",max_query(x,y)-min_query(x,y)); } return 0; }
相关文章推荐
- BZOJ 1699 & 1636 POJ 3264: [Usaco2007 Jan]Balanced Lineup排队 ST算法简介
- bzoj 1636 && bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队(RMQ)
- BZOJ 1699: [Usaco2007 Jan]Balanced Lineup排队
- 【bzoj1699】[Usaco2007 Jan]Balanced Lineup排队
- 【BZOJ】1699 [Usaco2007 Jan]Balanced Lineup排队 ST表
- 【bzoj1699】[Usaco2007 Jan][Balanced Lineup排队]
- bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队 分块
- BZOJ1699: [Usaco2007 Jan]Balanced Lineup排队
- BZOJ 1699 [Usaco2007 Jan]Balanced Lineup排队 线段树
- BZOJ 1699 [Usaco2007 Jan]Balanced Lineup排队 线段树
- bzoj:1699;poj 3264: [Usaco2007 Jan]Balanced Lineup排队
- bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队【st表||线段树】
- bzoj1699 [Usaco2007 Jan]Balanced Lineup排队
- BZOJ 1699 [USACO2007 Jan] Balanced Lineup排队
- 【bzoj 1699】[Usaco2007 Jan]Balanced Lineup排队
- 【BZOJ】1699: [Usaco2007 Jan]Balanced Lineup排队(rmq/树状数组)
- BZOJ 1699: [Usaco2007 Jan]Balanced Lineup排队( RMQ )
- bzoj1636: [Usaco2007 Jan]Balanced Lineup
- bzoj 1636: [Usaco2007 Jan]Balanced Lineup -- 线段树
- BZOJ 1636: [Usaco2007 Jan]Balanced Lineup