/*
查询区间众数,要求强制在线
设有T个块
1.众数只可能在大块[L,R]里或者两端[l,L) (R,r]里出现
2.大块的众数只要预处理打表一下即可,复杂度n*T(这样的区间有T*T个)
3.两端的众数需要枚举每个元素,然后查询这个元素在区间[l,r]里出现的次数
用一个vector记录每个值出现的位置,然后用二分找其在区间[l,r]出现的次数即可
这部分每次查询的复杂度是N/T*logN,
块长取sqrt(nlogn)
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 100005
int id,n,len,pos[maxn],v[maxn],val[maxn],f[][];
vector<int>ve[maxn];
map<int,int>mp;//哈希表 int cnt[maxn];
void pre(int p){//处理第p块到n整块区间众数
memset(cnt,,sizeof cnt);
int mx=,ans=;
for(int i=(p-)*len+;i<=n;i++){
cnt[v[i]]++;
int t=pos[i];
if(cnt[v[i]]>mx || cnt[v[i]]==mx && val[v[i]]<val[ans])
ans=v[i],mx=cnt[v[i]];
f[p][t]=ans;
}
}
int query(int l,int r,int x){//查询[l,r]区间x出现了几次
int t=upper_bound(ve[x].begin(),ve[x].end(),r)-lower_bound(ve[x].begin(),ve[x].end(),l);
return t;
}
int query(int a,int b){
int ans,mx,p=pos[a],q=pos[b];
ans=f[p+][q-];
mx=query(a,b,ans);
for(int i=a;i<=min(p*len,b);i++){
int t=query(a,i,v[i]);
if(t>mx || t==mx&&val[v[i]]<val[ans])
ans=v[i],mx=t;
}
if(p!=q)
for(int i=(q-)*len+;i<=b;i++){
int t=query(i,b,v[i]);
if(t>mx || t==mx&&val[v[i]]<val[ans])
ans=v[i],mx=t;
}
return ans;
} int main(){
cin>>n;len=;
for(int i=;i<=n;i++){
cin>>v[i];
if(mp[v[i]]==){
mp[v[i]]=++id;
val[id]=v[i];
}
v[i]=mp[v[i]];
ve[v[i]].push_back(i);
}
for(int i=;i<=n;i++)
pos[i]=(i-)/len+;
for(int i=;i<=pos[n];i++)
pre(i);//预处理
for(int i=;i<=n;i++){
int a,b;
cin>>a>>b;
if(a>b)swap(a,b);
cout<<val[query(a,b)]<<endl;
}
}

在线版区间众数 hzw的代码。。的更多相关文章

  1. 在线运行Javascript,Jquery,HTML,CSS代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xht ...

  2. pc、移动端H5网站 QQ在线客服、群链接代码【我和qq客服的那些事儿】

    转载:http://blog.csdn.net/fungleo/article/details/51835368#comments 移动端H5 QQ在线客服链接代码 <a href=" ...

  3. Eclipse4.5在线安装Aptana插件及配置代码提示教程

    一.Aptana插件官网地址         我在网上试过登陆到aptana官网后点击下载,选择下载eclipse插件版,然后页面给出一串地址:http://download.aptana.com/s ...

  4. 记录一个在线压缩和还原压缩js代码的工具

    packer – javascript 压缩工具 http://dean.edwards.name/packer/ Javascript Beautifier ---可以恢复某些压缩工具压缩的js代码 ...

  5. 阶段3 2.Spring_02.程序间耦合_4 曾经代码中的问题分析

    创建新的项目 修改打成jar包 创建一个接口 用来模拟保存的方法 创建接口的实现类 我们没有IAccountDao这个类.那么就需要去创建Iaccountdao IAccountDao接口的创建 创建 ...

  6. 【伯乐在线】最值得阅读学习的 10 个 C 语言开源项目代码

    原文出处: 平凡之路的博客   欢迎分享原创到伯乐头条 伯乐在线注:『阅读优秀代码是提高开发人员修为的一种捷径』http://t.cn/S4RGEz .之前@伯乐头条 曾发过一条微博:『C 语言进阶有 ...

  7. MarkDown/Html在线转换(支持代码高亮,可复制到微信公众号、今日头条)

    MarkDown/Html在线转换能够将md渲染成html并且能保持代码高亮,可以方便的复制待格式的html粘贴到微信公众号,CSDN,简书,博客园,开源中国等. 扫码体验在线助手小程序 我是java ...

  8. 程序员最喜欢用的在线IDE代码编译器,什么?你竟然不知道!

    1.网址https://tech.io/snippet 支持 20+ 种编程语言,页面上没有杂七杂八的东西,非常简约,非常干净,另外,它上面的代码段还可以嵌入到网页之中. 2.网址 https://w ...

  9. 新浪代码部署手册 git管理工具

    目前新浪云上的应用支持通过Git和SVN来部署代码. Git仓库地址 https://git.sinacloud.com/YOUR_APP_NAME SVN仓库地址 https://svn.sinac ...

随机推荐

  1. jq中的事件委托:closest,parent,parents,delegate

    closest .closest(selector) 从当前元素开始沿 DOM 树向上,获得匹配第一个符合选择器的祖先元素,返回零个或一个元素的 jQuery 对象. .parents() 和 .cl ...

  2. oracle存储过程---创建存储过程语句

    一.创建存储过程语句 语法:  CREATE OR REPLACE PROCEDURE testname( argument1 TYPE1, ....  ) AS BEGIN ...... END  ...

  3. Javascript入门(四)条件控制语句

    一.条件控制语句 1. if <script type="text/javascript"> var num = 1 if( num == 3 ){ alert(&qu ...

  4. #6284. 数列分块入门 8(区间询问等于一个数 cc 的元素,并将这个区间的所有元素改为 c)

    题目链接:https://loj.ac/problem/6284 题目大意:中文题目 具体思路:还是和sqrt那个题的思路相同的,标记每一块的值是不是相同的,注意lazy下标的下放. AC代码: #i ...

  5. shell编程 之 流程控制(条件语句和循环语句)

    1 if ...else... 基本格式: if condition then commend else commend fi 当然也可以写到一行,用[ ]表明边界,用:表示分行.比如: if [ $ ...

  6. Nginx系列2:用Nginx搭建一个可用的静态资源Web服务器

    上一节中编译好自己的nginx服务器后, 现在要对nginx.conf文件进行配置,搭建一个可用的静态资源Web服务器 1.放入可访问的html文件到nginx文件夹下,如图1所示: 这里我放入的是一 ...

  7. spring boot 笔记1

    demon 目录,公共配置 SbMybatisApplication.java package com.example.sb_mybatis; import org.mybatis.spring.an ...

  8. [转] 解决Driver/library version mismatch

    跑模型 torch.cuda.is_available()返回 False nvidia-smi返回:Failed to initialize NVML: Driver/library version ...

  9. 使用SpringSocial开发微信登录

    ⒈编写微信用户对应的数据结构 package cn.coreqi.social.weixin.entities; /** * 微信用户实体类 */ public class WeixinUserInf ...

  10. python3.7 contextvars在asyncio使用的

    from contextvars import ContextVar import asyncio import random cv = ContextVar('cv') async def wait ...