设为首页 加入收藏

TOP

uva 11235 Frequent values(游程编码+区间最小值查询)
2015-07-20 17:43:55 来源: 作者: 【 】 浏览:2
Tags:uva 11235 Frequent values 游程 编码 区间 最小 查询

游程编码的基本原理是:用一个符号值或串长代替具有相同值的连续符号(连续符号构成了一段连续的“行程”。游程编码因此而得名),使符号长度少于原始数据的长度。只在各行或者各列数据的代码发生变化时,一次记录该代码及相同代码重复的个数,从而实现数据的压缩。


游程编码(Run Length Encoding , RLE)

例如:5555557777733322221111111
游程编码为:(5,6)(7,5)(3,3)(2,4)(1,7)


解题思路很好:

用value[i] count[i] 分别表示 第i段的数值 和 出现次数;

num[p] left[p] right[p]分别表示位置p所在段的编号和左右端点的位置。

每次查询(left,right)的结果为以下三个部分的最大值:从left到left所在段结束处的元素个数、从right所在段开始到right处的元素个数、中间第num[left]+1段到第num[right]-1段的count的最大值。

特殊情况:如果left和right在同一段中,答案是R-L+1。


解决方法如下:

#include 
  
   
#include 
   
     #include 
    
      using namespace std; const int maxn = 100001; int n,q; int d[maxn][35]; int a[maxn]; int value[maxn],count_[maxn]; int num[maxn],left[maxn],right[maxn]; void RMQ_int(){ for(int i=0;i
     
       num[right_]-1) ans=max(ans,0); else{ ans=max(ans,RMQ(num[left_]+1,num[right_]-1)); } } printf("%d\n",ans); } } return 0; } 
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇STL algorithm算法copy_if(8) 下一篇Codeforces 464 C. Substitutes i..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)