题意:给你一串数列,然后给你一个起终位置对,问你这个段序列里出现最多的出现了几次。

思路:一段序列里,无非就是三种情况,1,一组相同的数,2两组相同,3,3组或者更多组数,这样我们队每一组数的开头结束位置记录一下,然后对每次询问判断一下几组数,分别讨论,多组的就分为第一组,最后一组,中间多组,中间直接rmq就可以了。

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <stdlib.h>
 6 #include <vector>
 7 #include <queue>
 8 #include <stack>
 9 #define loop(s,i,n) for(i = s;i < n;i++)
10 #define cl(a,b) memset(a,b,sizeof(a))
11 int num[100005],b[100005],rt[100005],lt[100005],a[100005],maxd[100005][17];
12 using namespace std;
13 void init(int n)
14 {
15     int i,j;
16     for(i = 1;i <= n;i++)
17     maxd[i][0] = a[i];
18
19     for(j = 1;(1<<j) <= n;j++)
20     {
21         for(i = 1;i+(1<<j)-1<=n;i++)
22         {
23             maxd[i][j] = max(maxd[i][j-1],maxd[i+(1<<(j-1))][j-1]);
24         }
25     }
26 }
27 int maxrmq(int l,int r)
28 {
29     int k = 0;
30     while(1<<(k+1) <= r-l+1)k++;
31     return max(maxd[l][k],maxd[r-(1<<k)+1][k]);
32
33 }
34 int main()
35 {
36     int n,q;
37
38     while(scanf("%d",&n)&&n)
39     {
40         int i,j;
41         scanf("%d",&q);
42         loop(1,i,n+1)
43         {
44             scanf("%d",&b[i]);
45         }
46         int cnt,leap;
47         cnt = 1;
48         leap = b[1];
49         for(i = 0;i <= n;i++)
50         a[i] = num[i] = 0;
51         lt[1] = 1;
52         for(i = 1;i <= n;i++)
53         {
54             if(leap != b[i])
55             rt[cnt] = i-1,cnt++,lt[cnt] = i,leap = b[i];
56             num[i] = cnt;
57             a[cnt]++;
58         }
59         rt[cnt] = n;
60         init(cnt);
61
62         while(q--)
63         {
64             int l,r,a,b,c;
65             scanf("%d %d",&l,&r);
66             if(num[l] == num[r])
67             b = r-l+1;
68             else if(num[r]-num[l] > 1)
69             {
70                 a = rt[num[l]]-l+1;
71                 b = r-lt[num[r]]+1;
72                 c = maxrmq(num[l]+1,num[r]-1);
73                 b = max(a,b);
74                 b = max(b,c);
75             }
76             else
77             {
78                 a = rt[num[l]]-l+1;
79                 b = r-lt[num[r]]+1;
80                 b = max(a,b);
81             }
82
83             printf("%d\n",b);
84         }
85     }
86     return 0;
87 }

View Code

转载于:https://www.cnblogs.com/0803yijia/p/3296830.html

poj 3368 Frequent values rmq相关推荐

  1. POJ 3368 Frequent values (RMQ)

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

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

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

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

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

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

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

  5. UVA 11235 Frequent values(RMQ)

    Frequent values TimeLimit:3000Ms You are given a sequence of n integers a1 , a2 , ... , an in non-de ...

  6. Frequent values【线段树】

    Frequent values UVA - 11235 题目传送门 题目大意:给出一个非降序的整数数组a1,a2,a3...an,你的任务是对一系列的询问(i,j),回答ai,ai+1,ai+2... ...

  7. 【图灵杯 E也即POJ 3368】简单的RMQ

    Description 给定一个数组,其中的元素满足非递减顺序.任意给定一个区间[i,j],求其中某个元素重复出现的最大次数. Input 多组数据输入.每组数据的第一行包含两个整数n和q(1< ...

  8. POJ 2785 4 Values whose Sum is 0

    传送门:http://poj.org/problem?id=2785 解题思路: 从这四个数列中选择的话总有n的4次方中情况,所以全部判断一遍不可行.不过将他们对半分成AB和CD再考虑的话就可以解决了 ...

  9. 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. SH 脚本注意事项之 IF 判断
  2. 160个Crackme026之六段式注册码详解
  3. sonar 上安装插件之后,展示的代码规则
  4. 使用Java高速实现进度条
  5. linux下常见生产脚本,不看后悔的Linux生产服务器Shell脚本分享(2)
  6. 灵魂拷问:到底要不要写单元测试,如何正确进行单元测试?
  7. 2021年JAVA面试题~集合篇附带答案
  8. abb机器人编程指令写字_最全的ABB机器人编程指令与函数
  9. 【python学习】python实现利用pygame绘画基本图形、显示图片,实现图形图片随机效果。python绘制行列图片
  10. Hibernate(6)——映射类型
  11. 51单片机学习历程——建立新的工程
  12. GIAC全球互联网架构大会2017上海站圆满结束,PPT合集下载
  13. 自己写的一个AI输入滤波函数
  14. 连获国际大奖创下史上第一,这家耳机品牌凭什么与众不同?
  15. 缓存存在那些位置?缓存位置可分Service Worker、Memory Cache、Disk Cache、Push Cache四种
  16. Xshell传输文件到服务器(centos/ubuntu)上传/下载
  17. Master of Phi (欧拉函数 + 积性函数的性质 + 狄利克雷卷积)
  18. tcp 解决short write问题
  19. matlab改变图片亮度(HSV模型)
  20. 小白上楼梯(递归设计)java

热门文章

  1. efficientnet-yolo3-tf2的实现
  2. 基于块分割及CNN的文档矫正与光照消除方法 (有源码和数据)
  3. java用hashmap_Java集合之HashMap的用法
  4. python实现不重复排列组合_Python使用combinations实现排列组合的方法
  5. Python-在线文本情感分析实验
  6. TENER: Adapting Transformer Encoder for Name Entity Recognition
  7. IOS开发-TableView表视图LV2
  8. [转载]QMessageBox 用法_vortex_新浪博客
  9. juniper srx电话单通
  10. 记录一些js面试题以及解法