zoukankan      html  css  js  c++  java
  • poj 3368 Frequent values(RMQ)

     1 /************************************************************
     2 题目:    Frequent values(poj 3368)
     3 链接:    http://poj.org/problem?id=3368
     4 题意:    给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之
     5           间连续出现次数最多的次数
     6 算法:    RMQ
     7 思路:    借助数组f[i]。表示第i位前面有f[i]个相同的数。对于
     8           每个区间(l,r)。暴力求前面几个相同的数。然后在用RMQ
     9           求后面区间的值。
    10 *************************************************************/
    11 #include<cstdio>
    12 #include<cstring>
    13 #include<cstdlib>
    14 #include<algorithm>
    15 #include<iostream>
    16 #include<cmath>
    17 using namespace std;
    18 
    19 const int mx=100005;
    20 int dp[mx][30];
    21 int a[mx],f[mx];
    22 int n,q;
    23 
    24 void makermq()
    25 {
    26     for (int i=1;i<=n;i++) dp[i][0]=f[i];
    27     for (int j=1;(1<<j)<=n;j++)
    28     {
    29         for (int i=1;i+(1<<j)-1<=n;i++)
    30         {
    31             dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
    32         }
    33     }
    34 }
    35 
    36 int rmq(int u,int v)
    37 {
    38     if (u>v) return 0;
    39     int k=(int)(log(v-u+1)/log(2.0));
    40     return max(dp[u][k],dp[v-(1<<k)+1][k]);
    41 }
    42 
    43 int main()
    44 {
    45     while (~scanf("%d",&n)&&n)
    46     {
    47         scanf("%d",&q);
    48         for (int i=1;i<=n;i++) scanf("%d",&a[i]);
    49         f[1]=1;
    50         for (int i=2;i<=n;i++)
    51         {
    52             if (a[i]==a[i-1]) f[i]=f[i-1]+1;
    53             else f[i]=1;
    54         }
    55         makermq();
    56 
    57         while (q--)
    58         {
    59             int l,r;
    60             scanf("%d%d",&l,&r);
    61             int ans=1;
    62             for (l=l+1;l<=r;l++)
    63             {
    64                 if (a[l]!=a[l-1]) break;
    65                 ans++;
    66             }
    67             ans=max(ans,rmq(l,r));
    68             printf("%d
    ",ans);
    69         }
    70     }
    71 }
  • 相关阅读:
    【转载】USB2.0接口差分信号线设计
    2.4G高频PCB天线设计
    [转]热插拔原理和应用
    [转]or cad drc 错误
    Chrome浏览器任意修改网页内容
    Oracle笔记之约束
    Oracle笔记之表空间
    Oracle笔记之序列(Sequence)
    Oracle笔记之用户管理
    Win7下SQLPlus登录时报错"SP2-1503:无法初始化Oracle调用界面"
  • 原文地址:https://www.cnblogs.com/pblr/p/5734023.html
Copyright © 2011-2022 走看看