poj3264 Balanced Lineup(RMQ +st)
2015-10-11 21:30
417 查看
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> #include<cstdlib> #include<map> #include<queue> #include <deque> #include <list> #include <ctime> #include <stack> #include <vector> #include<set> #define Maxn 50005 #define MOD typedef long long ll; #define FOR(i,j,n) for(int i=j;i<=n;i++) #define DFR(i,j,k) for(int i=j;i>=k;--i) #define lowbit(a) a&-a const int inf = 0x3f3f3f3f; const double pi = acos(-1.0); const double e=2.7182818284590452354; using namespace std; int num[Maxn]; int f1[Maxn][100]; int f2[Maxn][100]; void st(int n) { int i,j,k,m; k=(int)(log((double)n)/log(2.0)); for(i=0;i<n;i++) { f1[i][0]=num[i]; f2[i][0]=num[i]; } for(j=1;j<=k;j++) { for(i=0;i+(1<<j)-1<n;i++) { m = i + (1<<(j-1)); f1[i][j]=max(f1[i][j-1],f1[m][j-1]); f2[i][j]=min(f2[i][j-1],f2[m][j-1]); } } } void rmq(int i,int j) { int k = (int)(log(double(j-i+1))/log(2.0)),t1,t2; t1 = max(f1[i][k],f1[j-(1<<k)+1][k]); t2 = min(f2[i][k],f2[j-(1<<k)+1][k]); printf("%d\n",t1-t2); } int main() { int n, query; int a, b; while(~scanf("%d %d", &n, &query)) { FOR(i,0,n-1)scanf("%d", num+i); st(n); while(query--) { scanf("%d%d", &a, &b); rmq(a-1,b-1); } } return 0; }
相关文章推荐
- SenchaTouch2.1调用百度地图实例
- Oracle shutdown / startup 选项含义详解
- struts.properties struts.xml default.properties
- VMware vSphere 5 主机网卡的网络设计布局和配置
- Import Running in STMS
- 通过 poj3368 问题讨论:RMQ问题的 tarjan_lca 求解
- PLC中ST语言的几种程序流程控制语句
- Android内存机制分析——堆和栈
- POJ3264-Balanced Lineup RMQ
- HeadFir st 设计模式学习笔记11——状态模式
- HeadFir st 设计模式学习笔记18--中介者(M ediator)模式拾零
- HeadFir st 设计模式学习笔记21-- 解释者(Inter pr eter)模式拾零
- HeadFir st 设计模式学习笔记22-- 备忘录(M emento)模式拾零
- [BZOJ2006][NOI2010][RMQ/主席树][二叉堆]超级钢琴
- RMQ问题
- No result defined for action …… and result ……
- 如何从ST官网下载官方库函数(更新版)
- 标准C知识03
- RMQ 模板
- [PKU3264]Balanced Lineup