一段区间的最值问题,用线段树或RMQ皆可。两种代码都贴上:又是空间换时间。。
RMQ 解法:(8168KB 1625ms)
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <cstdlib> using namespace std; #define N 50003 int a[N],dmin[N][20],dmax[N][20],n; void RMQ_init() { int i,j; for(i=1;i<=n;i++) dmin[i][0] = dmax[i][0] = a[i]; for(j=1;(1<<j)<=n;j++) { for(i=1;i+(1<<j)-1<=n;i++) { dmin[i][j] = min(dmin[i][j-1],dmin[i+(1<<(j-1))][j-1]);