ST 表 模板

来源:互联网 发布:知乎电影1942精彩片段 编辑:程序博客网 时间:2024/04/29 12:00

本以为ST表没用,做了个题发现O(1)的强大之处~~~

没想到 endl 比 ‘\n’慢这么多; 用endl 30分,T 7个点; \n 直接AC;

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const int MAXN=200001;int a[MAXN],dp[MAXN][21],n,m;struct ST{    void st_init()    {        for(int i=1;i<=n;i++) dp[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]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);        return;    }    int query(int l,int r)    {        int k=log2(r-l+1);        return max(dp[l][k],dp[r-(1<<k)+1][k]);    }}st;void solve(){    cin>>n>>m;    for(int i=1;i<=n;i++) scanf("%d",&a[i]);    st.st_init();    while(m--)    {        int x,y;        scanf("%d%d",&x,&y);        cout<<st.query(x,y)<<"\n";    }}int main(){    solve();    return 0;}