POJ 3368 & UVA 11235 - Frequent values
题目链接:http://poj.org/problem?id=3368
RMQ应用题。
解题思路参考:http://blog.csdn.net/libin56842/article/details/46482803
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define MAXN 100000+5
using namespace std; int num[MAXN],a[MAXN];
int n,q,seg_num;
struct Seg{
int value,left,right,len;
}seg[MAXN]; int dp[MAXN][];
void RMQ_init()
{
for(int i=;i<=seg_num;i++) dp[i][]=seg[i].len;
double j_max=(log(seg_num)/log(2.0));
for(int j=;j<=j_max;j++)
{
for(int i=;i<=seg_num;i++)
if(i+( << j)- <= seg_num) dp[i][j]=max(dp[i][j-],dp[i+(<<(j-))][j-]);
}
}
int query(int l,int r)
{
int k=log(r-l+)/log(2.0);
return max(dp[l][k],dp[r-(<<k)+][k]);
} int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
while(scanf("%d",&n) && n!=)
{
scanf("%d",&q);
seg_num=;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(i==)
{
seg[seg_num].value=a[];
seg[seg_num].len=;
seg[seg_num].left=;
seg[seg_num].right=;
num[i]=seg_num;
}
else if(a[i]==a[i-])
{
seg[seg_num].len++;
seg[seg_num].right++;
num[i]=seg_num;
}
else
{
seg_num++;
seg[seg_num].value=a[i];
seg[seg_num].left=i;
seg[seg_num].right=i;
seg[seg_num].len=;
num[i]=seg_num;
}
}
RMQ_init();
while(q--)
{
int l,r;
scanf("%d%d",&l,&r);
if(num[l]==num[r])
{
printf("%d\n",r-l+);
}
else
{
int ans=;
if(num[l]+ <= num[r]-) ans=query(num[l]+,num[r]-);
ans=max( ans , max( seg[ num[l] ].right - l + , r - seg[ num[r] ].left + ) );
printf("%d\n",ans);
}
}
}
}
附一个网上的数据生成器:
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<time.h>
using namespace std;
ofstream fout("input.txt");
int main(){ srand((unsigned)time(NULL)); int n = rand()% + ;
int q = rand()% + ; fout<<n<<" "<<q<<endl; int start = rand()% - ;
for(int i =; i<= n;i++){
start += rand()%;
fout<<start<<" ";
} fout<<endl;
for(int i = ;i < q;i++){
start = rand()%n + ;
int end = min(rand()%(n - start + ) + start,n);
fout<<start<<" "<<end<<endl;
} fout<<""<<endl;
return ;
}
POJ 3368 & UVA 11235 - Frequent values的更多相关文章
- [POJ] 3368 / [UVA] 11235 - Frequent values [ST算法]
		
2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...
 - RMQ算法 以及UVA 11235 Frequent Values(RMQ)
		
RMQ算法 简单来说,RMQ算法是给定一组数据,求取区间[l,r]内的最大或最小值. 例如一组任意数据 5 6 8 1 3 11 45 78 59 66 4,求取区间(1,8) 内的最大值.数据量小 ...
 - UVA - 11235 Frequent values
		
2007/2008 ACM International Collegiate Programming Contest University of Ulm Local Contest Problem F ...
 - UVA 11235 Frequent values(RMQ)
		
Frequent values TimeLimit:3000Ms , ... , an in non-decreasing order. In addition to that, you are gi ...
 - UVA 11235 Frequent values 线段树/RMQ
		
vjudge 上题目链接:UVA 11235 *******************************************************大白书上解释**************** ...
 - UVA 11235 Frequent Values ---RMQ
		
大白书上的例题,具体讲解见大白书,最好用用一个Log数组直接求k,这样就是纯O(1)了 #include <iostream> #include <cstdio> #inclu ...
 - UVa 11235 Frequent values (RMQ && 区间出现最多次的数的次数)
		
题意 : 给出一个长度为 n 的不降序序列,并且给出 q 个形如(L, R)的问询,问你这个区间出现的最多次的数的次数. 分析 : 很自然的想到将区间“缩小”,例如1 1 2 3 3 3就可以变成2 ...
 - 数据结构(RMQ):UVAoj 11235 Frequent values
		
Frequent values You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. I ...
 - 11235 - Frequent values
		
<算法竞赛入门经典-训练指南>P198 记录一下区间的左右边界就可以了 #include <iostream> #include <stack> #include ...
 
随机推荐
- C#------Aspose的License文件
			
Aspose官网: https://docs.aspose.com/display/cellsnet/Home 下载地址: http://vdisk.weibo.com/s/uoya0tRiZNf0X ...
 - 开启apache的server-status辅助分析工具
			
在Apache的调优过程中,可以通过查看Apache提供的server-status(状态报告)来验证当前所设置数值是否合理,在httpd.conf文件中做如下设置来打开: #加载mod_status ...
 - MySQL --- 计算指定日期为当月的第几周
			
SET @d=NOW(); ; 啦啦啦
 - 8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource
			
8.3.1 Resource实现类------InputStreamResource:访问输入流资源的实现类.ByteArrayResource:访问字节数组资源的实现类. 5. 访问字节数组资源 ⊙ ...
 - Spring getBean 首字母大小写问题
			
如果类第一个字母大写第二个小写,那么首字母小写获取bean 如果第一个和第二个字母都是大写的,那个获取bean首字母要大写
 - Java最快的maven仓库地址,国内Maven地址,超快的Maven地址
			
Java最快的maven地址,国内Maven地址,超快的Maven地址 >>>>>>>>>>>>>>>> ...
 - osg剔除背面开启
			
//设置背部剔除看不见背面东西 osg::ref_ptr<osg::CullFace> cullface=new osg::CullFace(osg::CullFace::BACK); s ...
 - SVN设置没有写log不能commit
			
操作方法:在SVN的Repositories下,找到要配置的项目,在项目目录下找到hooks文件夹,在其下创建pre-commit.bat文件,把下面复制进去就可以了(无需重启,如果改动,保存bat文 ...
 - [Ubuntu] 如何在 Lubuntu 安装 python-spidermonkey
			
SpiderMonkey 是由 Mozilla 开发的 Javascript 引擎,它由 C/C++ 编写而成.Mozilla 在其多个产品中使用了该引擎,包括 Firefox 浏览器. python ...
 - Spring Web 应用的最大败笔
			
开发人员在使用Spring应用是非常擅长谈论依赖注入的好处.不幸的是,他们不是那么真的利用它的好处,如单一职责原则,分离关注原则.如果我们一起来看看大部分Spring的Web应用程序,常见的错误的设计 ...