博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【poj3368】Frequent values
阅读量:4487 次
发布时间:2019-06-08

本文共 965 字,大约阅读时间需要 3 分钟。

没学ST之前肯定是用线段树什么的写,不过如果把它看作一个RMQ问题代码量突然就降了下来。

ST算法可以实现O(NlogN)预处理,O(1)时间查询。

蓝书上说的是开三个num,left和right数组存该位置所在段的编号和左右端点位置,其实没有必要,只要从l向右走到第一次出现的数字(即第t位)那里(比如-1,-1,-1,1,2中查询第2-第5,则l要走到a[4]==1处,此时t=4),然后跑一遍ST,最后取RMQ所求的最大值和t-l的较大值即可。

具体实现细节看代码:

#include
#include
#include
using namespace std;int a[1000005],f[1000005][20],d[1000005];int rmq(int l,int r){ if(l>r)return 0; int k=0; while((1<<(k+1))<=r-l+1)k++; return max(f[l][k],f[r-(1<
=2&&a[i]==a[i-1])d[i]=d[i-1]+1; else d[i]=1; f[i][0]=d[i]; } for(int j=1;(1<
<=n;j++) for(int i=1;i+(1<
<=n;i++) f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]); for(int i=1;i<=q;i++) { scanf("%d %d",&l,&r); t=l; while(t<=r&&a[t]==a[t-1])t++; printf("%d\n",max(rmq(t,r),t-l)); } } return 0;}
View Code

 

转载于:https://www.cnblogs.com/JKAI/p/7003417.html

你可能感兴趣的文章
程序员做开发,前台、后台、测试哪个累?
查看>>
《程序是怎样跑起来的》第三章
查看>>
Jquery回到顶部效果
查看>>
开园第一笔
查看>>
Spark项目之电商用户行为分析大数据平台之(七)数据调研--基本数据结构介绍...
查看>>
原来fb可以在一个工程里面输出多个swf模块
查看>>
Codeforces Round #271 (Div. 2) E. Pillars 线段树优化dp
查看>>
Codeforces Round #FF (Div. 2) D. DZY Loves Modification 优先队列
查看>>
【学习】logger
查看>>
超市管理系统—运行结果及总结
查看>>
oracle存储过程语法
查看>>
Delphi APP 開發入門(十)REST Client 開發
查看>>
elk
查看>>
.net 模糊匹配路径
查看>>
用包来组织模型
查看>>
ORA-29857: 表空间中存在域索引和/或次级对象
查看>>
LeetCode58 Length of Last Word
查看>>
Python基础语法 系统学习
查看>>
推荐15款好用的JS开发工具
查看>>
ios开发之数据的持久化存储机制
查看>>