• uva 11235


    题目链接:uva 11235 - Frequent values

    题目大意:给定一个非降序的整数数组。要求计算对于一些询问(i,j)。回答ai,ai+1,,aj中出现最多的数出现的次数。

    解题思路:由于序列为非降序的。所以同样的数字肯定是靠在一起的,所以用o(n)的方法处理处每段同样数字的区间。然后对于每次询问:

    • num[i]=num[j]:ji+1
    • numinumj:max(RMQ(righti+1,reftj1),max(rightii+1,jleftj+1))
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    const int maxn = 1e5+5;
    
    int N, Q, num[maxn], rmq[maxn][20];
    int left[maxn], right[maxn];
    
    void RMQ_init () {
        memset(rmq, 0, sizeof(rmq));
        for (int i = 1; i <= N; i++)
            rmq[i][0] = right[i] - left[i] + 1;
    
        for (int j = 1; (1<<j) <= N; j++) {
            for (int i = 1; i + (1<<j) - 1 <= N; i++)
                rmq[i][j] = max(rmq[i][j-1], rmq[i+(1<<(j-1))][j-1]);
        }
    }
    
    void init () {
        for (int i = 1; i <= N; i++)
            scanf("%d", &num[i]);
    
        left[1] = 1;
        for (int i = 2; i <= N; i++) {
            if (num[i] == num[i-1])
                left[i] = left[i-1];
            else
                left[i] = i;
        }
    
        right[N] = N;
        for (int i = N-1; i >= 1; i--) {
            if (num[i] == num[i+1])
                right[i] = right[i+1];
            else
                right[i] = i;
        }
        RMQ_init();
    }
    
    int RMQ (int L, int R) {
        if (L > R)
            return 0;
        int k = 0;
        while (1<<(k+1) <= R-L+1)
            k++;
        return max(rmq[L][k], rmq[R-(1<<k)+1][k]);
    }
    
    int main () {
        while (scanf("%d%d", &N, &Q) == 2 && N) {
            init();
            int x, y;
            for (int i = 0; i < Q; i++) {
                scanf("%d%d", &x, &y);
                if (num[x] == num[y])
                    printf("%d
    ", y - x + 1);
                else
                    printf("%d
    ", max(RMQ(right[x]+1, left[y]-1), max(right[x] - x + 1, y - left[y] + 1)));
            }
        }
        return 0;
    }

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Java程序中执行Python脚本
    hive笔记2元数据查询
    服务网格简介(转载)
    自定义hivehook(转载)
    线程池:ThreadPoolExcutor源码阅读
    Mysql 的Innodb引擎和Myisam数据结构和区别
    AQS源码阅读
    关于本博客主题设置教程
    使用dockerfile部署springboot应用
    第四章 面向对象(一)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4665213.html
Copyright © 2020-2023  润新知