zoukankan      html  css  js  c++  java
  • UVA

    非常优美的RMQ问题,可以运到桶的思想

    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #define MAXN 100000+10
    #define LOG 20
    #define pii pair<int,int>
    using namespace std;
    int a[MAXN];
    int cnt[MAXN],left[MAXN],right[MAXN],tot;
    int n,T;
    int p[MAXN];
    int d[MAXN][LOG];
    void RMQ_init(){
        for(int i=1;i<=tot;i++){
            d[i][0]=cnt[i];
        }
        for(int j=1;j<LOG;j++){
            for(int i=1;i<=tot;i++){
                if(i+(1<<j)-1>tot)break;
                d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]);
            }    
        }
    }
    int RMQ(int x,int y){
        int len=y-x+1;
        int k=(int)(log(len*1.0)/log(2));
        k=max(k-2,0);
        while((1<<(k+1))<=len)k++;
        return max(d[x][k],d[y-(1<<k)+1][k]);
    }
    void solve(){
        memset(cnt,0,sizeof(cnt));
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            if(a[i]!=a[i-1]){
                right[tot]=i-1;
                tot++;
                left[tot]=i;
            }    
            p[i]=tot;
            cnt[tot]++;
        }
        right[tot]=n;
        RMQ_init();
        for(int i=1;i<=T;i++){
            int L,R;
            scanf("%d%d",&L,&R);
            if(p[L]==p[R]){
                printf("%d
    ",R-L+1);
            }
            else{
                int ans=max(right[p[L]]-L+1,R-left[p[R]]+1);
                if(p[L]+1<=p[R]-1) ans=max(ans,RMQ(p[L]+1,p[R]-1));
                printf("%d
    ",ans);
            }
        }    
    }
    int main()
    {
    //    freopen("data.in","r",stdin);
        while(1){
            scanf("%d%d",&n,&T);
            if(!n)break;
            solve();
        }
        return 0;
    }
  • 相关阅读:
    0/1背包问题
    假如爱有天意(中文版)
    tomcat集群
    分布式锁
    centos7安装Harbor(转载)
    isEmpty和isBlank的区别
    单体应用架构和分布式架构的比较
    微服务鉴权
    mysql的时区设置
    RSA非对称加密算法
  • 原文地址:https://www.cnblogs.com/w-h-h/p/7895748.html
Copyright © 2011-2022 走看看