hdu 1806 rmq
找到一个区间内出现最多的数的次数
- 10 3 //10个数字三次询问
- -1 -1 1 1 1 1 3 10 10 10
- 2 3
- 1 10
- 5 10
- 0
- 1
4
3
- #include<cstdio>
- #include<iostream>
- #include<algorithm>
- #include<cstring>
- #include<cmath>
- #include<queue>
- using namespace std;
- const int maxn=;
- int n,m;
- const int MAXN = ;
- int dp[MAXN][];
- int mm[MAXN];
- int a[MAXN],b[MAXN];
- //初始化RMQ, b数组下标从1开始,从0开始简单修改
- void makeRMQ(int n,int b[])
- {
- for(int i=;i<n;i++)
- dp[i][]=b[i];
- for(int j=;(<<j)<=n;j++)
- for(int i=;i+(<<j)-<n;i++)
- dp[i][j]=max(dp[i][j-],dp[i+(<<(j-))][j-]);
- }
- int rmq(int s,int v)
- {
- int k=(int)(log(v-s+1.0)/log(2.0));
- return max(dp[s][k],dp[v-(<<k)+][k]);
- }
- int bi_search(int s,int t)
- {
- int tmp=a[t];
- int l=s;
- int r=t;
- int mid;
- while(l<r)
- {
- mid=((l+r)>>);
- if(a[mid]>=tmp)r=mid;
- else l=mid+;
- }
- return r;
- }
- int main()
- {
- int i,j,k;
- #ifndef ONLINE_JUDGE
- freopen("1.in","r",stdin);
- #endif
- int q;
- while(scanf("%d",&n)!=EOF)
- {
- if(n==) break;
- scanf("%d",&q);
- for(i=;i<n;i++) scanf("%d",&a[i]);
- int tmp=;
- for(i=n-;i>=;i--)
- {
- if(i==n-) tmp=;
- else
- {
- if(a[i]==a[i+]) tmp++;
- else tmp=;
- }
- b[i]=tmp;
- }
- makeRMQ(n,b);
- while(q--)
- {
- int s,t;
- scanf("%d%d",&s,&t);
- s--,t--;
- int temp=bi_search(s,t);
- int ans=t-temp+;
- t=temp-;
- if(s>t) printf("%d\n",ans); //从s到t的数字都相同
- else printf("%d\n",max(ans,rmq(s,t)));
- }
- }
- }
hdu 1806 rmq的更多相关文章
- HDU 1806
http://acm.hdu.edu.cn/showproblem.php?pid=1806 非常玄妙的rmq问题,这个st算法有点神 #include <iostream> #inclu ...
- HDU - 6305 RMQ Similar Sequence(笛卡尔树)
http://acm.hdu.edu.cn/showproblem.php?pid=6305 题目 对于A,B两个序列,任意的l,r,如果RMQ(A,l,r)=RMQ(B,l,r),B序列里的数为[0 ...
- hdu 6305 RMQ Similar Sequence——概率方面的思路+笛卡尔树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6305 看题解,得知: 0~1内随机取实数,取到两个相同的数的概率是0,所以认为 b 序列是一个排列. 两个 ...
- [HDU 1806] Frequent values
Frequent values Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- Find the hotel HDU - 3193(RMQ)
题意: 有n个旅馆,从这n个旅馆中找出若干个旅馆,使得这若干个旅馆满足这样的条件:不能从其它和剩下的旅馆中找到一个价格和距离都小于这个旅馆的旅馆... 解析: 按price 排序,若price相同, ...
- hdu 1806(线段树区间合并)
Frequent values Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 6305.RMQ Similar Sequence-笛卡尔树+数学期望 (2018 Multi-University Training Contest 1 1008)
6305.RMQ Similar Sequence 这个题的意思就是对于A,B两个序列,任意的l,r,如果RMQ(A,l,r)=RMQ(B,l,r),B序列里的数为[0,1]的实数,B的重量为B的所有 ...
- HDU 5696 RMQ+滑窗
区间的价值 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- hdu 3183 rmq+鸽巢原理
题目大意: 给你一个数字字符串序列,给你要求删掉的数字个数m,删掉m个数使的剩下的数字字符串的之最小.并输出这个数字: 基本思路; 这题解法有很多,贪心,rmq都可以,这里选择rmq,因为很久没有写r ...
随机推荐
- MYSQL远程登录权限设置(转)
Mysql默认关闭远程登录权限,如下操作允许用户在任意地点登录: 1. 进入mysql,GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ...
- MySql开启事务
CREATE PROCEDURE test_sp1( ) BEGIN ; ; START TRANSACTION; INSERT INTO test VALUES(NULL, 'test sql 00 ...
- Java Socket 网络编程心跳设计概念
Java Socket 网络编程心跳设计概念 1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...
- commons-logging和Log4j 日志管理/log4j.properties配置详解
commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...
- 新浪微博客户端(5)-自定义UISearchBar
iOS自带的UISearchBar有很多限制,我们可以使用UITextField做出一个类似于SearchBar的效果. //===================================== ...
- C# 我理解的接口、抽象类、以及事件
一.摘要 面试中无数次被问及到什么是接口,什么是抽象类,接口和抽象类有什么区别?什么是委托,什么是事件. 请写出猫叫了,老鼠跑了的例子..... 这些东西对于一些初学者来说可能还真的有点搞不懂,对于一 ...
- 自动获取wordpress日志中的第一张图片作为缩略图
图片在博客中算是吸引访客阅读欲望的一种方法,在日志列表如果有一张吸引力十足的图片作为缩略图,70%的游客会点击浏览具体的文章.既然那样,赶紧去加缩略图吧. 我们知道 WordPress 有个日志缩略图 ...
- NGUI 学习笔记实战之二——商城数据绑定(Ndata)
上次笔记实现了游戏商城的UI界面,没有实现动态数据绑定,所以是远远不够的.今天采用NData来做一个商城. 如果你之前没看过,可以参考上一篇博客 NGUI 学习笔记实战——制作商城UI界面 ht ...
- Lucene4.3开发之分词器总结
Lucene4.3开发之分词器总结 http://java.chinaitlab.com/tools/940011.html
- Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression & Regularization
原文:http://blog.csdn.net/abcjennifer/article/details/7716281 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...