uva11235 RMQ
来源:互联网 发布:什么是数据挖掘 编辑:程序博客网 时间:2024/04/26 00:18
一段不减序列a1,a2...an,对于任意询问(i,j),回答ai,a(i+1)...aj中出现次数最多的值所出现的次数
按照不同值将序列分为若干段,记录相关数组,并用RMQ进行询问。
#include<cstdio>#include<algorithm>#include<vector>using namespace std;const int maxn=100000+10;const int maxlog=20;//区间最大值struct RMQ{ int d[maxn][maxlog]; void init(const vector<int>& A){ int n=A.size(); for(int i=0;i<n;i++) d[i][0]=A[i]; for(int j=1;(1<<j)<=n;j++) for(int i=0;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((1<<(k+1))<=R-L+1) k++;//如果2^(k+1)<=R-L+1,那么k还可以加1 return max(d[L][k],d[R-(1<<k)+1][k]); }};//a[i]:第i个数的值,num[i]:第i个数的编号,left[i]、right[i]:第i个数所在段的左右端点编号int a[maxn],num[maxn],left[maxn],right[maxn];RMQ rmq;int main(){ int n,q; //freopen("a.txt","r",stdin); while(scanf("%d",&n)!=EOF){ if(!n) break; scanf("%d",&q); for(int i=0;i<n;i++) scanf("%d",&a[i]); a[n]=a[n-1]+1;//哨兵 int start=-1; vector<int> count; for(int i=0;i<=n;i++) if(i==0||a[i]>a[i-1]){//从新段开始,记录旧段的长度和其中每点的编号和左右端点位置 if(i>0){ count.push_back(i-start); for(int j=start;j<i;j++) num[j]=count.size()-1,left[j]=start,right[j]=i-1; } start=i; } rmq.init(count); while(q--){ int L,R,ans; scanf("%d%d",&L,&R); L--;R--; if(num[L]==num[R]) ans=R-L+1; else { ans=max(R-left[R]+1,right[L]-L+1); if(num[L]+1<num[R]) ans=max(ans,rmq.query(num[L]+1,num[R]-1)); } printf("%d\n",ans); } } return 0;}
0 0
- RMQ uva11235
- UVA11235 RMQ
- uva11235 RMQ
- uva11235(RMQ)
- uva11235 - Frequent values(RMQ)
- Uva11235 RMQ ST算法
- Uva11235 Frequent values (RMQ)
- UVA11235:Frequent values(RMQ)
- uva11235(RMQ问题)
- UVa11235 Frequent values[RMQ]
- RMQ(需要转化一下)uva11235
- uva11235
- uva11235
- uva11235
- UVA11235
- UVA11235
- RMQ问题的解析和高效率算法--uva11235
- POJ3368/HDU1806/UVa11235 Frequent Values 游程编码+RMQ
- 配置Spring需要的jar包!
- Nginx安装部署
- diff 和 patch
- python数组的使用
- Google Hacking
- uva11235 RMQ
- 使用盒布局使元素全屏居中
- nginx健康检测(ngx_http_upstream_check_module 淘宝)
- 通用js表单验证工具类插件-is.js
- jQuery 插件 Touchslider触摸、鼠标操作幻灯片交互脚本
- SharePoint 2013 如何恢复服务器场的内容数据(Content Database)Azure 环境
- Android中Service(服务)详解
- 使用7Z开源SDK压缩解压数据(LzmaCompress、LzmaUncompress)
- 如何输出一个字符数组