UVa 11235 频繁出现的数值
2015-05-02 13:14
393 查看
题意描述:给出一个非降序列的整数数组a1,a2,...an。你的任务是对于一系列询问(i,j),回答ai,....aj,中出现次数最多的次数。
RMQ,以前看过但是没敲过,自己没看书敲了一下,感觉还挺顺。虽然还是wa了两次,第一次因为少了个中括号,第二次因为i-j的数的个数写成了j-i。
code:
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; }
相关文章推荐
- UVA 11235 频繁出现的数值 RMQ
- RMQ,ST表(频繁出现的数值,UVA 11235)
- UVa 11235 频繁出现的数值(RMQ)
- UVA - 11235 Frequent values 频繁出现的数值(RMQ)
- POJ 3368—— Frequent values(频繁出现的数值UVA11235) RMQ
- UVa 11235 频繁出现的数值
- Uva 11235 频繁出现的数值(RMQ-Sparse Table 算法)(训练指南)
- UVA - 11235 Frequent values 频繁出现的数值 RMQ+游程编码
- UVA 11235 Frequent values 非递减序列 l r范围内 出现最多的数字次数 RMQ
- 例题3.8 频繁出现的数值 UVa11235
- 第三章例题8 (频繁出现的数值)RMQ
- 频繁出现的数值
- UVA 11235 Frequent values
- UVA 11235 Frequent values (RMQ)
- Win10应用程序无响应频繁出现的解决方法
- UVA 11235 - Frequent values RMQ的应用
- http下载中出现频繁断线,或者文件下载不完整,停滞。
- 算法 Tricks(四)—— 判断序列中的字符/数值是否交替出现
- UVa 11235 Frequent values / RMQ or 线段树
- uva 11235