http://poj.org/problem?id=3368

追完韩剧 想起这题来了 想用线段树搞定来着 结果没想出来。。然后想RMQ 想出来了

算是离散吧 把每个数出现的次数以及开始的位置及结束的位置记录下来 以次数进行RMQ 再特殊处理下区间端点就OK 了

WA一次 盯了半小时 原来少了个=号  好吧好吧。。

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<cmath>
using namespace std;
#define N 200005
struct node
{
int s,e,a;
}p[N];
int b[N],f[N],fm[N][];
void init(int n)
{
int i,j,o = floor(log10(double(n))/log10(double()));
for(j = ; j <= o ; j++)
for(i = ; i <= n+-(<<j) ; i++)
{
fm[i][j] = max(fm[i][j-],fm[i+(<<(j-))][j-]);
}
}
int main()
{
int i,n,q;
while(scanf("%d",&n)&&n)
{
scanf("%d",&q);
for(i = ; i <= n ;i++)
{
scanf("%d",&b[i]);
}
int g = ;
p[++g].a = b[];
p[g].s = ;f[] = ;
int pre = b[];
for(i = ; i <= n ; i++)
{
if(b[i]!=pre)
{
p[g].e = i-;
p[++g].a = b[i];
p[g].s = i;
pre = b[i];
}
f[i] = g;
}
p[g].e = n;
for(i = ; i <= g ; i++)
fm[i][] = p[i].e-p[i].s+;
init(g);
while(q--)
{
int a,b,t;
scanf("%d%d",&a,&b);
if(a>b)
{
t = a;a=b;b=t;
}
int x = f[a],y = f[b];
if(x==y)
printf("%d\n",b-a+);
else if(y-x==)
{
int maxz = max(b-p[y].s+,p[x].e-a+);
printf("%d\n",maxz);
}
else
{
int maxz = max(b-p[y].s+,p[x].e-a+);
x++;y--;
int o = floor(log10(double(y-x+))/log10(double()));
int mm = max(fm[x][o],fm[y-(<<o)+][o]);
printf("%d\n",max(mm,maxz));
}
}
}
return ;
}

poj3368Frequent values(RMQ)的更多相关文章

  1. POJ3368Frequent values[RMQ 游程编码]

    Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17581   Accepted: 6346 ...

  2. RMQ算法 以及UVA 11235 Frequent Values(RMQ)

    RMQ算法 简单来说,RMQ算法是给定一组数据,求取区间[l,r]内的最大或最小值. 例如一组任意数据 5 6 8 1 3 11 45 78 59 66 4,求取区间(1,8)  内的最大值.数据量小 ...

  3. poj 3368 Frequent values(RMQ)

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

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

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

  5. UVA 11235Frequent values(RMQ)

    训练指南P198 题意:给出一个非降序排列的整数数组a1, a2…… an,你的任务是对于一系列询问(i,j),回答ai, ai+1 ……aj 中出现的次数最多的次数 这题不仅学到了rmq的应用还学到 ...

  6. UVA 11235 Frequent Values ---RMQ

    大白书上的例题,具体讲解见大白书,最好用用一个Log数组直接求k,这样就是纯O(1)了 #include <iostream> #include <cstdio> #inclu ...

  7. [poj3368]Frequent values(rmq)

    题意:给出n个数和Q个询问(l,r),对于每个询问求出(l,r)之间连续出现次数最多的次数. 解题关键:统计次数,转化为RMQ问题,运用st表求解,注意边界. 预处理复杂度:$O(n\log n)$ ...

  8. POJ 3368 Frequent values(RMQ 求区间出现最多次数的数字的次数)

    题目链接:http://poj.org/problem? id=3368 Description You are given a sequence of n integers a1 , a2 , .. ...

  9. UVa 11235 Frequent values (RMQ && 区间出现最多次的数的次数)

    题意 : 给出一个长度为 n 的不降序序列,并且给出 q 个形如(L, R)的问询,问你这个区间出现的最多次的数的次数. 分析 : 很自然的想到将区间“缩小”,例如1 1 2 3 3 3就可以变成2 ...

随机推荐

  1. 【html】【20】高级篇--轮播图[聚焦]

    下载: http://sc.chinaz.com/jiaoben/151204445580.htm 效果: html <!doctype html> <html> <he ...

  2. 使用CHttpFile从服务器端正确的读取数据

    前段时间在给软件做升级提示模块的时候发现一个问题,就是使用CHttpFile对象无法从服务器端获取到正确的响应数据长度,无论是使用CHttpFile:: QueryInfo方法,还是使用CHttpFi ...

  3. Linux网络服务器epoll模型的socket通讯的实现(一)

    准备写一个网络游戏的服务器的通讯模块,参考网上看到的一些代码,在linux下面实现一个多线程的epoll模型的socket通讯的代码,以下是第一部分多线程的切换代码: 1 #include <s ...

  4. 抽象工厂(Abstract Factory)模式

    一.抽象工厂(Abstract Factory)模式 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family ...

  5. WF4的数据库 表

    WF4的数据库 表 SQL 建表 SqlPersistenceProviderSchema.sql InstanceData 实例数据表 SqlPersistenceService_Schema.sq ...

  6. java se基础

    Super和this的详解 http://wenku.baidu.com/view/365d9100a6c30c2259019e44.html Java 采用三个显式 也就是说 必须明确指定 关键字来 ...

  7. 纯原生js移动端图片压缩上传插件

    前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于 ...

  8. oracle服务介绍

    按照windows 7 64位 安装oracle 11g R2中的方法成功安装Oracle 11g后,共有7个服务,这七个服务的含义分别为: 1. Oracle ORCL VSS Writer Ser ...

  9. WPF中Application.Current的使用

    WPF程序对应一个Application对象,当前的Application对象可以通过Application.Current获取,通过获取到的Application对象,我们可以做以下的事情: App ...

  10. poj 2001 Shortest Prefixes trie入门

    Shortest Prefixes 题意:输入不超过1000个字符串,每个字符串为小写字母,长度不超过20:之后输出每个字符串可以简写的最短前缀串: Sample Input carbohydrate ...