zoukankan      html  css  js  c++  java
  • uva 11235

    RMQ问题;

    采用游程编码;

    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #define maxn 100009
     5 using namespace std;
     6 
     7 int d[maxn][30],value[maxn],cnt[maxn],num[maxn],left[maxn],right[maxn];
     8 
     9 void RMQ_init(int n)
    10 {
    11     for(int i=1; i<=n; i++)d[i][0]=cnt[i];
    12     for(int j=1; (1<<j)<=n; j++)
    13         for(int i=1; i+(1<<j)-1<=n; i++)
    14             d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]);
    15 }
    16 
    17 int RMQ(int l,int r)
    18 {
    19     if(l>r)return 0;
    20     int k=0;
    21     while(1<<(k+1)<=r-l+1)k++;
    22     return max(d[l][k],d[r-(1<<k)+1][k]);
    23 }
    24 
    25 int main()
    26 {
    27     int n,m,q,x;
    28     while(scanf("%d",&n)&&n)
    29     {
    30         scanf("%d",&q);
    31         memset(right,0,sizeof right);
    32         m=0;
    33         for(int i=1;i<=n;i++)
    34         {
    35             scanf("%d", &x);
    36             if(!m||value[m]!=x)
    37             {
    38                 value[++m]=x;
    39                 cnt[m]=1;
    40             }
    41             else cnt[m]++;
    42             num[i]=m;
    43         }
    44         cnt[m+1]=n;
    45         int k=1,tmpleft=1,tmpright=cnt[1];
    46         for(int i=1;i<=m;i++)
    47         {
    48             for(int j=1;j<=cnt[i];j++)
    49             {
    50                 left[k]=tmpleft;
    51                 right[k++]=tmpright;
    52             }
    53             tmpleft+=cnt[i];
    54             tmpright+=cnt[i+1];
    55         }
    56         RMQ_init(m);
    57         int l,r;
    58         while(q--)
    59         {
    60             scanf("%d%d",&l,&r);
    61             if(left[l]==left[r])printf("%d
    ",r-l+1);
    62             else printf("%d
    ",max(max(right[l]-l+1,r-left[r]+1),RMQ(num[l]+1,num[r]-1)));
    63         }
    64     }
    65     return 0;
    66 }
    View Code
  • 相关阅读:
    windows本地提权——2003笔记
    Windows与linux添加用户命令
    反弹shell集锦
    提权-特权升级
    常见端口
    git泄露利用脚本
    Thinkphp5命令执行利用
    Thinkphp2.1漏洞利用
    打ms15-034补丁出现“此更新 不适用于您的计算机”
    Hyda爆破
  • 原文地址:https://www.cnblogs.com/yours1103/p/3386795.html
Copyright © 2011-2022 走看看