一句话,多次查询区间的众数的次数

注意多组数据!!!!

RMQ方法:

预处理 i 及其之前相同的数的个数

再倒着预处理出 i 到不是与 a[i] 相等的位置之前的一个位置, 查询时分成相同的一段和不同的一段 (RMQ)

但是要注意 to[i] 大于查询范围的情况, 以及RMQ时 x < y 的情况!!

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<string>
#include<iomanip>
#include<ctime>
#include<climits>
#include<cctype>
#include<algorithm>
#ifdef WIN32
#define AUTO "%I64d"
#else
#define AUTO "%lld"
#endif
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=;
const int maxd=;
int n,q;
int a[maxn];
int sum[maxn];
int to[maxn];
inline bool init()
{
if(!~scanf("%d%d",&n,&q) || !n) return false;
for(int i=;i<=n;i++) scanf("%d",a+i);
sum[]=;
for(int i=;i<=n;i++)
if(a[i-]^a[i]) sum[i]=;
else sum[i]=sum[i-]+;
to[n]=n;
for(int i=n-;i;i--)
to[i] = a[i]^a[i+]? i : to[i+];
return true;
}
int dp[maxn][maxd];
void ST()
{
for(int i=;i<=n;i++) dp[i][] = sum[i];
int k=;
while( (<<k+) <= n ) k++;
for(int j=;j<=k;j++)
for(int i=;i+(<<j)-<=n;i++)
dp[i][j] = max( dp[i][j-] , dp[i+(<<j-)][j-] ); // j-1 moved !!!
}
inline int RMQ(int x,int y)
{
if (x>y) return -INF; // INF here to make the case extinct!!
int k=;
while( (<<k+) <= (y-x+) ) k++;
return max(dp[x][k] , dp[y-(<<k)+][k]);
}
int main()
{
freopen("fre.in","r",stdin);
freopen("fre.out","w",stdout);
while(init())
{
ST();
for(int i=;i<=q;i++)
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",max(sum[min(to[x],y)]-sum[x]+ , RMQ(to[x]+,y)));
}
}
return ;
}

线段树方法:

不急,懒得写了。。

[RMQ] [线段树] POJ 3368 Frequent Values的更多相关文章

  1. POJ 3368 Frequent values RMQ ST算法/线段树

                                                         Frequent values Time Limit: 2000MS   Memory Lim ...

  2. POJ 3368 Frequent values 【ST表RMQ 维护区间频率最大值】

    传送门:http://poj.org/problem?id=3368 Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total S ...

  3. POJ 3368 Frequent values 线段树与RMQ解法

    题意:给出n个数的非递减序列,进行q次查询.每次查询给出两个数a,b,求出第a个数到第b个数之间数字的最大频数. 如序列:-1 -1 1 1 1 1 2 2 3 第2个数到第5个数之间出现次数最多的是 ...

  4. poj 3368 Frequent values(RMQ)

    /************************************************************ 题目: Frequent values(poj 3368) 链接: http ...

  5. POJ 3368 Frequent values (基础RMQ)

    Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14742   Accepted: 5354 ...

  6. poj 3368 Frequent values(段树)

    Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13516   Accepted: 4971 ...

  7. poj 3368 Frequent values -Sparse-Table

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16537   Accepted: 5981 Description You ...

  8. Poj 3368 Frequent values

    /* 线段树区间合并 维护几个信息 到时候乱搞一下就好了 开始T了 有一种情况可以不用递归 直接算出来 */ #include<iostream> #include<cstdio&g ...

  9. POJ 3368 Frequent values(线段树区间合并)

    [题目链接] http://poj.org/problem?id=3368 [题目大意] 有一个有序序列,要求区间查询出现次数最多的数 [题解] 维护每个区间左端点和右端点,以及左右的长度,还有区间的 ...

随机推荐

  1. JSON序列化及利用SqlServer系统存储过程sp_send_dbmail发送邮件(一)

    JSON序列化 http://www.cnblogs.com/yubaolee/p/json_serialize.html 利用SqlServer系统存储过程sp_send_dbmail发送邮件(一) ...

  2. java.io.File中的pathSeparator与separator的区别

    先总的说一下区别:File.pathSeparator指的是分隔连续多个路径字符串的分隔符,例如:java   -cp   test.jar;abc.jar   HelloWorld就是指“;” Fi ...

  3. iOS开发——基本常识篇&各种控件默认高度

    各种控件默认高度   1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图 用户可以隐藏状态栏,也可以将状态栏设置 ...

  4. 5.6 在线DDL (online DDL)详解

    ONLINE ddl 原理: online ddl相关参数 测试原表数据是否能进行ONLINE DDL方法: online DDL 局限性 测试

  5. mysql sql语句使用技巧

    mysql更新数据限制limitmysql更新时,要更新记录中某个区间的数据,只能用WHERE条件来限制了,用LIMIT只能限制更新多少条!测试如下:UPDATE products SET goods ...

  6. php安装ecshop

    1.apache2.2正常 2.源码htdoc下面保存不动 3.E:\PHP 安装目录下 php5.3.28 就不支持jpeg php5.2.17 就不支持 mysql 说明就是php的问题,因为其他 ...

  7. Creader VIII VS. Creader VII+

    Launch x431 diagun is professional universal auto diagnostic tool which designed and developed by LA ...

  8. 自定义ZXing二维码扫描界面并解决取景框拉伸等问题

    先看效果 扫描内容是下面这张,二维码是用zxing库生成的 由于改了好几个类,还是去年的事都忘得差不多了,所以只能上这个类的代码了,主要就是改了这个CaptureActivity.java packa ...

  9. Pyhont 网络编程【第一篇】初始Socket网络套接字

    一.什么是socket: Socket 别名 “网络套接字”,指网络通信链句柄 其实就是一堆网络信息(ip+端口) 建立起的链接称之为socket,Socket的英文原义是“孔”或“插座”,用来实现不 ...

  10. 用expect做自动应答脚本

    Expect是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools).使用它系统管理员可以创 ...