UVa 11235 频繁出现的数值
来源:互联网 发布:贵金属手机交易软件 编辑:程序博客网 时间:2024/05/22 14:22
题意描述:给出一个非降序列的整数数组a1,a2,...an。你的任务是对于一系列询问(i,j),回答ai,....aj,中出现次数最多的次数。
RMQ,以前看过但是没敲过,自己没看书敲了一下,感觉还挺顺。虽然还是wa了两次,第一次因为少了个中括号,第二次因为i-j的数的个数写成了j-i。
code:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>using namespace std;const int maxn=100000+10;int length[maxn],origin[maxn],terminal[maxn],belong[maxn],maxin[maxn][100];//[,)int present;void init(){ present=0; memset(length,0,sizeof(length)); memset(origin,0,sizeof(origin)); memset(terminal,0,sizeof(terminal)); memset(belong,0,sizeof(belong));}void pretreatment(int* sequence){ for(int i=0;i<=present;i++) maxin[i][0]=length[i]; for(int j=1;(1<<j)<=(present+1);j++) for(int i=0;i+(1<<j)-1<=present;i++) maxin[i][j]=max(maxin[i][j-1],maxin[i+(1<<(j-1))][j-1]);}int query(int l,int r){ int k=0; if(r>=l){ while((1<<(k+1))<=r-l+1)k++; return max(maxin[l][k],maxin[r-(1<<k)+1][k]); } else return 0;}int main(){int n,q; while(scanf("%d",&n)==1&&n!=0){ scanf("%d",&q); init(); int x,y; scanf("%d",&x); length[present]++; terminal[present]++; for(int i=1;i<n;i++){ scanf("%d",&y); if(y==x){ length[present]++; terminal[present]++; belong[i]=present; } else { x=y; present++; length[present]=1; origin[present]=i; terminal[present]=i+1; belong[i]=present; } } pretreatment(length); //queary for(int i=0;i<q;i++){ int a,b; int ans; scanf("%d%d",&a,&b); a--; b--; if(belong[a]==belong[b])ans=b-a+1; else{ ans=terminal[belong[a]]-a; ans=max(ans,b-origin[belong[b]]+1); ans=max(ans,query(belong[a]+1,belong[b]-1)); } printf("%d\n",ans); } } return 0;}
0 0
- UVa 11235 频繁出现的数值
- UVA - 11235 Frequent values 频繁出现的数值(RMQ)
- UVa 11235 频繁出现的数值(RMQ)
- RMQ,ST表(频繁出现的数值,UVA 11235)
- 频繁出现的数值
- Uva 11235 频繁出现的数值(RMQ-Sparse Table 算法)(训练指南)
- UVA - 11235 Frequent values 频繁出现的数值 RMQ+游程编码
- 例题3.8 频繁出现的数值 UVa11235
- 第三章例题8 (频繁出现的数值)RMQ
- 频繁出现的UAC
- POJ 3368—— Frequent values(频繁出现的数值UVA11235) RMQ
- 频繁出现的“派遣工作”广告
- 频繁连接断开mysql出现的问题
- Android中解决动画的频繁出现
- 我的程序频繁出现用户session丢失
- DB2频繁出现死锁,常用解决问题的命令
- 找出二叉搜索树中出现最频繁的节点
- DB2频繁出现死锁,常用解决问题的命令
- Android之Adapter用法总结
- perl面向对象
- Repeated DNA Sequences
- 控制台使用CString
- c 语言 前言
- UVa 11235 频繁出现的数值
- Openfire3.9.3源代码导入eclipse中开发配置教程
- iOS 开发库(iOS Developer Library)
- Adblock Plus的设置
- hdoj 3789 奥运排序问题
- 面试题50:树中两个结点的最低公共祖先
- solr的简单使用说明
- 删除编辑文件警告Swap file “…” already exists!
- VC实现文件拖放