[st表]

这其实也是一种数据结构。

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 }

 

posted @ 2019-07-15 15:01  kaike  阅读(171)  评论(0编辑  收藏  举报