#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define maxn 50005 int n,q; int dp[maxn][30],d[maxn][30],a[maxn]; void rmq(){ for(int i=1;i<=n;i++)dp[i][0]=a[i],d[i][0]=a[i]; for(int j=1;(1<<j)<=n;j++){ for(int i=1;i+(1<<j)-1<=n;i++){ dp[i][j]=min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]); d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]); } } } int query1(int l,int r){ int k=0; while((1<<(k+1))<=r-l+1)k++; return min(dp[l][k],dp[r-(1<<k)+1][k]); } int query2(int l,int r){ int k=0; //int k=floor(log(R-L+1.0)/log(2.0)); while((1<<(k+1))<=r-l+1)k++; return max(d[l][k],d[r-(1<<k)+1][k]); } int main() { int u,v; //freopen("in.txt","r",stdin); while(~scanf("%d%d",&n,&q)){ for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } rmq(); for(int i=0;i<q;i++){ scanf("%d%d",&u,&v); printf("%d\n",query2(u,v)-query1(u,v)); } } }线段树
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define maxn 50005 #define inf 0x3f3f3f3f int n,q; int a[maxn],ll[maxn<<1],rr[maxn<<1],mi[maxn<<1],ma[maxn<<1]; inline void pushup(int i){ ma[i]=max(ma[i<<1],ma[i<<1|1]); mi[i]=min(mi[i<<1],mi[i<<1|1]); } void build(int l,int r,int i){ ll[i]=l; rr[i]=r; if(l==r){ mi[i]=a[l]; ma[i]=a[l]; return ; } int m=(ll[i]+rr[i])>>1,ls=i<<1,rs=ls|1; build(l,m,ls); build(m+1,r,rs); pushup(i); } int query1(int l,int r,int i){ if(l<=ll[i]&&rr[i]<=r){ return mi[i]; } int m=(ll[i]+rr[i])>>1,ls=i<<1,rs=ls|1; int ans=inf; if(l<=m)ans=min(ans,query1(l,r,ls)); if(m<r)ans=min(ans,query1(l,r,rs)); return ans; } int query2(int l,int r,int i){ if(l<=ll[i]&&rr[i]<=r){ return ma[i]; } int m=(ll[i]+rr[i])>>1,ls=i<<1,rs=ls|1; int ans=0; if(l<=m)ans=max(ans,query2(l,r,ls)); if(m<r)ans=max(ans,query2(l,r,rs)); return ans; } int main() { int u,v; //freopen("in.txt","r",stdin); while(~scanf("%d%d",&n,&q)){ for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } build(1,n,1); for(int i=0;i<q;i++){ scanf("%d%d",&u,&v); printf("%d\n",query2(u,v,1)-query1(u,v,1)); } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 3264 Balanced Lineup(st或者线段树)
原文地址:http://blog.csdn.net/u013497977/article/details/47364603