uva 11235 Frequent values RMQ问题

【待完善】UVA-11235:Frequent values UVA-11235:Frequent values 来源:UVA 标签:数据结构,RMQ问题 参考资料: 相似题目: 题目 You are given a sequence of n integers a1, a2, … , an in non-decreasing order. In addition to that, you are given... 阅读详情

题目:给你一个n个数字的序列,且序列是不降的,现在问,对于每个询问query(i ,j),序列ai...aj中出现次数最多的那个数的出现次数是多少。


分析:此题应该是经典问题。首先进行游程编码(Run length encoding,RLE)。就是统计以某个值开始的连续出现次数。即(a,b)连续的a值有b个。

这样整序列就变成了以(a,b)为序列元素的另一个序列。再看对于一个询问,query(i, j).

设num[k]表示原序列的位置k在进行游程编码后的序列的位置。这样就可以变成 

对于一个询问就变成了   。RMQ(count , num[i]+1 ,num[j]-1)。也就是针对编码后序列的区间最大值问题。

而这个问题是可以解决的。当然还得注意i和j所在的位置。

//
//  main.cpp
//  uva 11235	Frequent values
//
//  Created by XD on 15/8/22.
//  Copyright (c) 2015年 XD. All rights reserved.
//

#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<vector>
#include <string.h>
#include <string>
#include <algorithm>
#include <set>
#include <map>
#include <cstdio>
using namespace std ;
const int maxn = 100000+10  ;
int n , q ;
int value[maxn] ;
int num[maxn] ;
int r[maxn] ,l[maxn] ;
int cnt[maxn] ;
int d[maxn][20 + 1] ;
int max(int x , int y)
{
    return x > y ? x :y ;
}
//RMQ代码
void RMQ(int areaNum)
{
    for (int i = 1; i <=areaNum; i++) {
        d[i][0] = cnt[i]  ;
    }
    for (int j =1; (1<<j) <= areaNum; j++) {
        for (int i = 1; i + (1 << j) -1<=n ; i++) {
            d[i][j] = max(d[i][j-1] , d[i + (1<<(j-1))][j-1]) ;
        }
    }
}
int query(int L , int R)
{
    int k = 0 ;
    while (L + (1<<k)-1 <=R ) {
        k++ ;
    }
    return max(d[L][k-1] , d[R -(1<<(k-1))+1][k-1]) ;
}

int main() {
    int ql,qr ;
    while (scanf("%d%d" ,&n,&q) ,n) {
        int last = -100100 ;int d ;int areaNum  = 0 ;int lastpos = 0 ;  ;
        for (int i = 0 ; i < n; i++) {
            scanf("%d" ,&d) ;
            if (d != last) {
                areaNum++ ;
                cnt[areaNum] =1 ;
                value[areaNum] = d ;
                lastpos = i+1 ;
                last = d ;
                num[i+1] = areaNum ;
                l[i+1] = lastpos;
            }
            else{
                cnt[areaNum] +=1 ;
                num[i+1] = areaNum ;
                l[i+1]  = lastpos ;
            }
        }
        RMQ(areaNum) ;
        for (int i = 0; i < q; i++) {
            scanf("%d%d" ,&ql, &qr) ;
            if (num[ql] == num[qr]) {
                printf("%d\n" , qr - ql + 1) ;
            }
            else{
                if (num[ql] +1 == num[qr]) {
                    printf("%d\n" , max(cnt[num[ql]] -(ql - l[ql]),qr-l[qr] + 1 )) ;
                }
                else{
                    printf("%d\n" ,max(query(num[ql] +1, num[qr] -1),max(cnt[num[ql]] -(ql - l[ql]),qr-l[qr] + 1 ))) ;
                }
            }
        }
    }
    return 0;
}


Appstore 3.2(f)违规自救指南:从触发到申诉的完整应对策略 本文详细解析了Appstore 3.2(f)违规的应对策略,从触发原因到申诉流程,帮助开发者有效自救。文章涵盖隐瞒行为、账户关联和信息造假三大违规场景的判定逻辑,并提供申诉信写作的黄金法则和长期合规防御措施,确保开发者能够顺利通过苹果审核。 阅读详情

相关推荐

coze+飞书多维表格,批量分析小红书笔记,关键还能获取图片(附保姆级教程)

通过coze工作流,一键同步小红书账号和笔记链接到飞书多维表格,效率飞升~

qq_24403067的博客 4173

Frequent Values(UVa 11235) RMQ问题

来自《算法竞赛入门经典训练指南》 1.RMQ问题 范围最小值问题(Range Minimum Query,RMQ)。给出一个n个元素的数组a[1],a[2],……a[n]。设计一个数据结构,支持查询操作Query(L,R):计算min{a[L],a[L+1],……a[R]}. 采用Tarjan的Sparse-Table算法,它预处理的时间是O(nlogn)。查询只需要O(1)。 令d[i]

相思作坊半世离殇的博客 382

vue3接入大华摄像头

┃ ┃ ┣ 📜PlaybackModal.vue 回放列表模态框。┃ ┃ ┗ 📜VideoGrid.vue 视频播放区域。┃ ┃ ┣ 📜ControlPanel.vue 控制面板。┃ ┃ ┣ 📜DeviceList.vue 设备列表。┃ ┣ 📂module //大华摄像头文件。

💻 专注 Vue 前端与 Java 后端技术 🌱 目前正在深入 Spring Boot、微服务与性能优化 📝 定期分享实战踩坑经验与学习笔记 🤝 欢迎交流,共同进步 913

Uva 11235 Frequent values 【RMQ问题】

Uva 11235 Frequent values 【RMQ问题】http://www.bnuoj.com/bnuoj/problem_show.php?pid=19653

DafeiACMer 440

QMI8658A和QMC5883L传感器校准全攻略:从零偏校准到椭球拟合

本文详细解析了QMI8658A和QMC5883L传感器的校准方法,从零偏校准到椭球拟合,涵盖了9轴运动传感器的核心误差来源及补偿技术。通过实战案例和数学建模,帮助开发者提升传感器精度,适用于无人机、AR/VR等智能硬件应用。

weixin_29189381的博客 157

第四节、C# 上位机面向对象编程详解(工控硬件继承实战版)

继承核心价值:在 C# 上位机工控开发中,继承的核心是通用逻辑复用与接口统一,将所有硬件的通用属性 / 方法封装到抽象基类,子类只需实现独有逻辑,大幅减少冗余代码。基类设计要点:优先使用抽象基类,合理分配访问修饰符(privateprotectedpublic),定义通用事件与虚方法,提供资源释放机制,兼顾复用性与扩展性。子类设计要点:通过: base()调用基类构造函数,强制实现抽象方法(保证接口统一),选择性重写虚方法(实现独有逻辑),复用基类的protected成员。多设备管理。

kylezhao2019的博客 784

【RMQ问题】uva11235Frequent values

/* RMQ问题 ----------------------------------------------------------------------------------------------- 用数组: cnt[i]:第i段中数的个数(每一段是指所有数都同的一段数)(在这里该数组相当于RMQ问题中的A[]数组) num[i]:位置i所在段的编号 left1[i]:位置i左端点的位置

young TO challenge! 744

实战分享:如何用Jetson Nano+HM30图传搭建低空YOLOv5检测系统(附VNC避坑指南)

本文详细介绍了如何利用Jetson Nano和HM30图传搭建低空YOLOv5检测系统,重点解决了无人机应用中的硬件连接和VNC延迟优化问题。通过对比WiFi直连与图传方案的优劣,提供了网络配置、VNC优化及YOLOv5模型加速的实战技巧,帮助开发者实现高效稳定的低空目标检测系统。

weixin_29174385的博客 110

UVA 11235--Frequent values+RMQ问题

题目链接:点击进入 以前也碰到过不需要修改,只需要单纯查询区间最值的题目,那时候都是用的线段树做的。但是现在大白书上提供了一个更好的算法。 当然这个题目本身还是不能直接套最大最小值的模板的,需要做一些转换。其中最主要的就是要将题目给的数据,处理成(a,b)这种格式,表示数字a连续出现b次,并且记录每个编号对应的段号。然后我们在处理过后的以段为表示单位的数据上进行RMQ查询了。代码如下:#incl

荒野孤鹰 1071

企业级 Agent 在 K8s 上的运行模型

Kubernetes├── Agent Orchestrator(控制面)├── Agent Runtime Pods(执行面)├── Graph DSL(流程层)├── Tool Services(能力层)K8s(调度)+ Graph(流程)+ Agent(决策)+ Tool(执行)+ Guard(治理)

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 1171

vue2学习笔记2-老规矩,从Hello World开始,了解Vue实例和模板

想要把“Hello,World”放置在页面上,首先需要准备一个HTML的块级元素div,来承接内容。

l_q_l的专栏 1255

[RMQ问题] Frequent values UVA - 11235 ST算法入门

题目链接:Frequent values 本来昨天下午就能搞出来的题硬是被一个极其微小的错误搞得花了两天时间才解决,说明自己还是功底不够,还有一方面是对RMQ的运用不那么熟练以至于出错需要大量时间找错误。 题意 给你一个非降序的整数数组,你的任务是对于一系列查询(i,j),回答ai,ai+1,...,aj{a_i,a_{i+1},...,a_j}ai​,ai+1​,...,aj​中出现次数最多的值所出现的次数。 题解 本题首先需要分析转换,如果按照正常暴力需要O(n2)O({n^2})O(n2)时间复杂度。

张小生的先生的博客 210

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

uva 11235 - Frequent values(RMQ问题)

题意:给出一个非降序排列的整数数组a1,a2,。。。an,你的任务是对于一系列询问(i,j),回答ai,ai+1,。。。,aj中出现次数最多的值所出现的次数。 #include #include #include #define mx 100000+10 #define max(x,y) (x)>(y) ? (x) : (y) using namespace std; int n,m,d

二十一画生的专栏 1315

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Uva 11235 Frequent values (RMQ问题 STable算法的应用)

给出一个非降序排列的整数数组,对于任意询问i,j,回答ai到aj中出现次数最多的值的次数 由于是非降序排序的,所以可以用一个val[]和cnt[]记录每个值出现的次数,再用l[],r[],num[]记录 每个值出现的位置和所在段的左右端点(用于判断查询的区间的位置) 对于val和cnt,可以用RMQ查询最大值,对于所给的i,j区间,需要进行以下判断: 1.i,j在同一段,则答案就是j-i+

HIT_Foodie 678

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

UVA - 11235 Frequent values RMQ问题

题目大意:给你一系列按非升序排列的数字,你的任务是,给出l,r,找出这个区间[l,r]出现次数最多的值所出现的次数解题思路:这题的话要用四个数组来记录 left[i]表示一连串和第i个数相同的数的最左边的位置 right[i]的表示最右边的数 num[i]表示第i个数所在都段的编号,段表示的是一连串数字相等的数 cnt[i]表示第i段有多少个数记录一共共有几段,然后把每段看成一个数字,再用R

静静地码 645

RMQ问题入门(sparse_table稀疏表)——UVA - 11235 Frequent values

RMQ问题入门(sparse_table稀疏表)——UVA - 11235 Frequent values

Sega_hsj 's Blog 453

Frequent values UVA - 11235 频繁出现的数值 RMQ(范围最小问题)

题目链接 You are given a sequence of n integers a1, a2, . . . , an in non-decreasing order. In addition to that, you are given several queries consisting of indices i and j (1 ≤ i ≤ j ≤ n). For each qu...

Nicolas的博客 427

指南第三章 例题八 UVA 11235 Frequent values(RMQ问题)

题目链接:http://7xjob4.com1.z0.glb.clouddn.com/31eeaedd10d813ea386928151f516e8a 中文题意: 给出一个非降序排列的整数数组a1,a2,…….,an。你的任务是对于一系列询问(i,j),回答ai,ai+1,…….aj中出现次数最多的值所出现的次数。 【输入格式】 输入包含多组数据。每组数据第一行

linlinsong—ACM界蒟水! 433

UVa 11235 Frequent values(RMQ)

题目链接:UVa 11235  Frequent values

fobdddf的专栏 505

UVA11235:Frequent values(RMQ)

You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In addition to that, you are given several queries consisting of indices i and j (1 ≤ i ≤ j ≤ n). For each query, d

ACM!荣耀之路! 3670

UVA - 11235——Frequent values(RMQ)

题目链接:https://cn.vjudge.net/problem/UVA-11235 思路:找出每个位置的数出现的次数,用time[i]表示i位置上的数的出现次数,lef[i]表示最左边与i位置相同的的数的位置,righ表示 最右边与i位置相同数的位置。用RMQ处理time数组。则区间【L,R】中出现最多数的次数为下面三个数的最大值 1. righ[L]-L+1 2. R-lef[R]...

creator平 250

UVA 11235 Frequent values 线段树/RMQ

  vjudge 上题目链接:UVA 11235 *******************************************************大白书上解释************************************************************   题目大意:给出一个非降序排列的整数数组 a1,a2,a3,...,an,你的任务是对于一...

aidiao7379的博客 186

UVA11235 Frequent values(RMQ)

题目大意:给出一个升序的序列,对于一系列的询问(i,j),回答i到j中出现次数最多的数字。 白书上的例题QAQ,游码编程建立对应的序号与段与最远到达的区间的序号,用RMQ查询一下即可。 #include #include #include #include using namespace std; const int N=100005; int val[N];//第i段的值 int d

HOrchard 385

UVa 11235 Frequent values

传送门:UVa 11235 题目描述:给一个非降序排列的整数数组,对于一系列询问[L,R],回答在此区间中出现次数最多的值出现的次数。 数组是非降序排列,因此相同的元素会排在一起,用value[]和cont[]记录不同的元素及出现的次数,然后用num[],Left[]和Right[]数组维护第i位的元素出现在哪一段内以及这个元素在最左边的位置和最右边的位置。利用RMQ维护cont,记录最大值。

Keep moving and looking forward 300

UVA - 11235 - Frequent values (RMQ)

UVA - 11235 Frequent values Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description 2007/2008 ACM International Colle

Never say never 698

uva 11235 - Frequent values(RMQ)

题目链接:uva 11235 - Frequent values 题目大意:给定一个非降序的整数数组,要求计算对于一些询问(i,j),回答ai,ai+1,…,aj中出现最多的数出现的次数。 解题思路:因为序列为非降序的,所以相同的数字肯定是靠在一起的,所以用o(n)的方法处理处每段相同数字的区间。然后对于每次询问: num[i]=num[j]:j−i+1numi≠numj:max

不慌不忙、不急不躁 1505
上一篇: LA 4329 - Ping pong 树状数组
下一篇: uva uva 1328 - Period ---KMP算法
LuckyqXd
博客等级 码龄12年 2粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值