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;
    }
  • 相关阅读:
    Jackson Annotation Examples
    Java 8 Stream API说明
    Spring Enable* 注解
    1568: [JSOI2008]Blue Mary开公司
    BZOJ1558: [JSOI2009]等差数列
    BZOJ3155: Preprefix sum
    BZOJ4552 [Tjoi2016&Heoi2016]排序
    BZOJ4653 [Noi2016]区间
    BZOJ4487 [Jsoi2015]染色问题
    Luogu2664 树上游戏
  • 原文地址:https://www.cnblogs.com/w-h-h/p/7895748.html
Copyright © 2011-2022 走看看