在线版区间众数 hzw的代码。。
/*
查询区间众数,要求强制在线
设有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的代码。。的更多相关文章
- 在线运行Javascript,Jquery,HTML,CSS代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xht ...
- pc、移动端H5网站 QQ在线客服、群链接代码【我和qq客服的那些事儿】
转载:http://blog.csdn.net/fungleo/article/details/51835368#comments 移动端H5 QQ在线客服链接代码 <a href=" ...
- Eclipse4.5在线安装Aptana插件及配置代码提示教程
一.Aptana插件官网地址 我在网上试过登陆到aptana官网后点击下载,选择下载eclipse插件版,然后页面给出一串地址:http://download.aptana.com/s ...
- 记录一个在线压缩和还原压缩js代码的工具
packer – javascript 压缩工具 http://dean.edwards.name/packer/ Javascript Beautifier ---可以恢复某些压缩工具压缩的js代码 ...
- 阶段3 2.Spring_02.程序间耦合_4 曾经代码中的问题分析
创建新的项目 修改打成jar包 创建一个接口 用来模拟保存的方法 创建接口的实现类 我们没有IAccountDao这个类.那么就需要去创建Iaccountdao IAccountDao接口的创建 创建 ...
- 【伯乐在线】最值得阅读学习的 10 个 C 语言开源项目代码
原文出处: 平凡之路的博客 欢迎分享原创到伯乐头条 伯乐在线注:『阅读优秀代码是提高开发人员修为的一种捷径』http://t.cn/S4RGEz .之前@伯乐头条 曾发过一条微博:『C 语言进阶有 ...
- MarkDown/Html在线转换(支持代码高亮,可复制到微信公众号、今日头条)
MarkDown/Html在线转换能够将md渲染成html并且能保持代码高亮,可以方便的复制待格式的html粘贴到微信公众号,CSDN,简书,博客园,开源中国等. 扫码体验在线助手小程序 我是java ...
- 程序员最喜欢用的在线IDE代码编译器,什么?你竟然不知道!
1.网址https://tech.io/snippet 支持 20+ 种编程语言,页面上没有杂七杂八的东西,非常简约,非常干净,另外,它上面的代码段还可以嵌入到网页之中. 2.网址 https://w ...
- 新浪代码部署手册 git管理工具
目前新浪云上的应用支持通过Git和SVN来部署代码. Git仓库地址 https://git.sinacloud.com/YOUR_APP_NAME SVN仓库地址 https://svn.sinac ...
随机推荐
- 🍓 react16.2新特性 🍓
react16.2新特性:组件中可以一次性return 多个子元素(子组件)了,也就是说,想return多个子元素,不用在外面包一个父盒子了. 方法一:把要return的元素放在一个空的jsx里面 方 ...
- T5557 读写卡详解
T5557的基本信息就不在这里详细介绍,不了解的可以去看T5557的收据手册. 一上来直接开始讲操作 存在七种操作,我们重点介绍四种,Standard Write,Protected Write,Di ...
- CF1139A Even Substrings
题目地址:CF1139A Even Substrings 一个数是偶数等价于其最后一位为偶数(2/4/6/8/0) 从左往右扫一遍,如果一个数是奇数则直接跳过,偶数则加上它对答案的贡献 这里的贡献应该 ...
- SpringSecurity实现用户名密码登录(Token)
传统的应用是将Session放在应用服务器上,而将生成的JSESSIONID放在用户浏览器的Cookie中,而这种模式在前后端分离中就会出现以下问题 1,开发繁琐. 2,安全性和客户体验差 3,有些前 ...
- Python笔记 【无序】 【四】
魔法方法1.__xx__ 总是被双下划线包围2.面向对象python的一切 3.能够在适当的时候自动被调用 构造和析构 __init__(self,……) -----相当于构造方法,类在实例 ...
- np.nonzero()函数用法
返回数组中不为0的元素的下标. 数组中元素可为布尔.整型和浮点型,返回值为元祖 一.一维数组 1.数组元素为布尔类型 a=np.array([True,False,True,False]) b=np. ...
- python3+selenium入门15-执行JavaScript
有时有些功能需要通过js来执行,比如拖动浏览器的滚动条.通过execute_script()方法可以执行js的代码 window.scrollTo()可以传两个参数,第一个参数是下方滚动条的位置,第二 ...
- Centos 6.x/7.x yum安装php5.6.X(最新版)
鉴于Centos 默认yum源的php版本太低了,手动编译安装又有点一些麻烦,那么如何采用Yum安装的方案安装最新版呢.那么,今天我们就来学习下如何用yum安装php最新版. 1.检查当前安装的PHP ...
- git与eclipse集成之导入组件到Eclipse工程
从工作目录中选择要导入的组件,右键选择:Import Projects,弹出窗口如下图所示,选择Import as general project 点击next,修改或使用默认的组件名称 点击fini ...
- inux下配置rsyncd服务
创建配置文件 touch /etc/rsyncd/rsyncd.conf #主配置文件 touch /etc/rsyncd/rsyncd.secrets #用户名密码文件,一组用户一行,用户名和密码使 ...