poj2452 Sticks Problem RMQ问题
题目大意说:给出一系列的木棒的长度,求出一个最大的区间[x,y],满足所有的len[k]>len[i] && len[k]<len[j] ,i<=k<=j。我看的题目分类说这个题目用RMQ,所有就用了RMQ实现,由于开始的时候我是枚举的所有的区间,所以肯定超时,后来改为从i找出以i开始的最大区间范围,然后在这个范围内求出最大值的下标j,那么j就是从i开始的所有>i且<j的最大区间,枚举采用二分,这样时间复杂度为O(nlogn). #include <iostream>#include <stdio.h>#include <cmath>const int N=50001;using namespace std;int m[N],large[N][17],smal[N][17];inline int get_max(int a,int b){ return a>b?a:b;}inline int get_min(int a,int b){ return a<b?a:b;}void initrmq(int n){ int i,j; for(i=0;i<n;i++) { large[i][0]=i; smal[i][0]=i; } for(j=1;(1<<j)<=n;j++) { for(i=0;i+(1<<j)-1 < n;i++) { if(m[large[i][j-1]] > m