一句话,多次查询区间的众数的次数

注意多组数据!!!!

RMQ方法:

预处理 i 及其之前相同的数的个数

再倒着预处理出 i 到不是与 a[i] 相等的位置之前的一个位置, 查询时分成相同的一段和不同的一段 (RMQ)

但是要注意 to[i] 大于查询范围的情况, 以及RMQ时 x < y 的情况!!

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<string>
#include<iomanip>
#include<ctime>
#include<climits>
#include<cctype>
#include<algorithm>
#ifdef WIN32
#define AUTO "%I64d"
#else
#define AUTO "%lld"
#endif
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=100005;
const int maxd=20;
int n,q;
int a[maxn];
int sum[maxn];
int to[maxn];
inline bool init()
{if(!~scanf("%d%d",&n,&q) || !n) return false;for(int i=1;i<=n;i++) scanf("%d",a+i);sum[1]=1;for(int i=2;i<=n;i++)if(a[i-1]^a[i]) sum[i]=1;else sum[i]=sum[i-1]+1;to[n]=n;for(int i=n-1;i;i--)to[i] = a[i]^a[i+1]? i : to[i+1];return true;
}
int dp[maxn][maxd];
void ST()
{for(int i=1;i<=n;i++) dp[i][0] = sum[i];int k=0;while( (1<<k+1) <= n ) k++;for(int j=1;j<=k;j++)for(int i=1;i+(1<<j)-1<=n;i++)dp[i][j] = max( dp[i][j-1] , dp[i+(1<<j-1)][j-1] ); // j-1 moved !!!
}
inline int RMQ(int x,int y)
{if (x>y) return -INF; // INF here to make the case extinct!!int k=0;while( (1<<k+1) <= (y-x+1) ) k++;return max(dp[x][k] , dp[y-(1<<k)+1][k]);
}
int main()
{freopen("fre.in","r",stdin);freopen("fre.out","w",stdout);while(init()){ST();for(int i=1;i<=q;i++){int x,y;scanf("%d%d",&x,&y);printf("%d\n",max(sum[min(to[x],y)]-sum[x]+1 , RMQ(to[x]+1,y)));}}return 0;
}

View Code

线段树方法:

不急,懒得写了。。

转载于:https://www.cnblogs.com/ourfutr2330/p/5668354.html

[RMQ] [线段树] POJ 3368 Frequent Values相关推荐

  1. POJ 3368 Frequent values 【ST表RMQ 维护区间频率最大值】

    传送门:http://poj.org/problem?id=3368 Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total S ...

  2. POJ 3368 Frequent values 线段树区间合并

    题意O(-1)不用解释.. 线段树结点维护三个信息:区间内相同的数出现最多的次数maxc.区间左边第一个数出现的次数lc.区间右边第一个数出现的次数rc. 分左区间右端点和右区间左端点相同于否的情况合 ...

  3. POJ 3368 Frequent values (RMQ)

    题目链接:http://poj.org/problem?id=3368 题目大意: 给出一个n个数长度的串. m个询问 求出给定范围内的最大连续字符串的长度 方法: RMQ模板, 记录每一个位置的数连 ...

  4. poj 3368 Frequent values rmq

    题意:给你一串数列,然后给你一个起终位置对,问你这个段序列里出现最多的出现了几次. 思路:一段序列里,无非就是三种情况,1,一组相同的数,2两组相同,3,3组或者更多组数,这样我们队每一组数的开头结束 ...

  5. HDU3183 A Magic Lamp —— 贪心(单调队列优化)/ RMQ / 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 题解: 方法一:贪心. 在草稿纸上试多几次可以知道,删除数字中从左到右最后一位递增(可以等于)的 ...

  6. 51Nod.1766.树上最远点对(树的直径 RMQ 线段树/ST表)

    题目链接 \(Description\) 给定一棵树.每次询问给定\(a\sim b,c\sim d\)两个下标区间,从这两个区间中各取一个点,使得这两个点距离最远.输出最远距离. \(n,q\leq ...

  7. 【CCCC】L3-017 森森快递 (30分),线段树rmq模板+贪心排序

    problem L3-017 森森快递 (30分) 森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号.由 ...

  8. 线段树练习——区间合并

    这类题目会询问区间中满足条件的连续最长区间,所以PushUp的时候需要对左右儿子的区间进行合并(这里最难理解) hdu 3308 http://acm.hdu.edu.cn/showproblem.p ...

  9. 【线段树】FREQUENT - Frequent values(luogu-SP1684 / poj 3368)

    FREQUENT - Frequent values luogu-SP1684 poj 3368 题目大意: 有一个单调不降序列,让你求出某些区间内的出现次数最多的数出现的次数(有多组数据,以0结尾) ...

  10. poj 3264 Balanced Lineup RMQ问题 线段树

    For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d ...

最新文章

  1. vue总结 08状态管理vuex
  2. 150页在线书「几何深度学习」上线:利用对称性和不变性解决机器学习问题
  3. 斯坦福抢开“元宇宙”第一课,上起来还真不便宜
  4. 论numpy中matrix 和 array的区别
  5. H3C 交换机S5130S软件版本升级
  6. Psscor2 - 微软内部的SOS升级版(知道.net3.5)
  7. ios取两个数之间的随机小数_如果取到小数区间内的任一数字?
  8. 2019 序列号_抖音发布2019年度报告;苹果序列号;熊猫互娱进入破产程序
  9. dep指定版本 go_Go 包管理工具-dep
  10. 关于中国移动宽带(中国铁通)比较卡
  11. 魔百盒CM201-1,YS代工-免拆-线刷固件及教程
  12. pytorch如何freeze模型参数
  13. ML-czy的小组任务4
  14. 使用fsck修复文件系统
  15. informatica session中bulk和normal模式
  16. 【微信小程序】开发入门篇(二)
  17. 关于Java面试,你应该准备这些知识点
  18. SAR成像处理算法_CS算法_程序设计(Matlab)
  19. 基于php+Mysql网上商城系统 开题报告
  20. Android 调整进程的最大fd 数目

热门文章

  1. 1、最小二乘回归、Lasso、岭回归
  2. linux下rpm包安装jdk,linux jdk rpm包安装
  3. jupyterlab中使用conda虚拟环境
  4. type(img).__module__ == np.__name__
  5. pytorch导入模型
  6. Network In Network论文笔记
  7. Python实现蒙特卡罗方法仿真模拟求解圆周率Pi值
  8. python连接SQLServer数据库创建数据表同时为每个字段加上对应的中文注释信息
  9. 鸿蒙2.0内测版手机版,不再遮遮掩掩,鸿蒙2.0测试版下月发布,用于手机内测
  10. 【Django 2021年最新版教程5】前端传递数据到后端处理 GET 方法