这其实也是一种数据结构。
1 for(int i=1;i<=n;i++) 2 st1[i][0]=st2[i][0]=a[i]; 3 for(int j=1;j<20;j++) 4 for(int i=1;i<=n;i++) 5 if(i+(1<<(j-1))<=n) 6 { 7 st1[i][j]=min(st1[i][j-1],st1[i+(1<<(j-1))][j-1]); 8 st2[i][j]=max(st2[i][j-1],st2[i+(1<<(j-1))][j-1]); 9 }
1 int query(int l,int r) 2 { 3 int len=log2(r-l+1); 4 ans=max(st2[l][len],st2[r-(1<<len)+1][len]); 5 //cout<<ans<<endl; 6 ans-=min(st1[l][len],st1[r-(1<<len)+1][len]); 7 return ans; 8 }