在线版区间众数 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 ...
随机推荐
- Django REST Framework API Guide 03
本节大纲 1.Routers 2.Parsers 3.Renderers Routers Usage from rest_framework import routers router = route ...
- 【tmos】spring data jpa 创建方法名进行简单查询
参考链接 spring data jpa 创建方法名进行简单查询:http://www.cnblogs.com/toSeeMyDream/p/6170790.html
- Javascript入门(一)弹出方框
今天要javascript做一个用网页弹出框框的效果,虽然没什么卵用. 效果如图,弹出一个“hello world”的框框. 1. 新建一个html 页面, 如图: <!DOCTYPE html ...
- java知识点5
扩展篇 云计算 IaaS.SaaS.PaaS.虚拟化技术.openstack.Serverlsess 搜索引擎 Solr.Lucene.Nutch.Elasticsearch 权限管理 Shiro 区 ...
- Samples topic
Rendering: http://www.cnblogs.com/miloyip/archive/2010/03/29/1698953.html http://www.scratchapixel.c ...
- Python运维开发基础05-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...
- C# 基础之const
1.使用 const 关键字来声明某个常量字段或常量局部变量.常量字段和常量局部变量不是变量并且不能修改. 常量可以为数字.布尔值.字符串或 null 引用(Constants can be numb ...
- VB中的冒号——bug
关于VB中的冒号,给许多人的印象都是:“一行可书写几句语句”.这么说是对的,但是有一种情况是不对的,那就是在条件语句中.这也是做一个VB项目升级的时候遇到,因为这个问题我查了好长时间程序,一直在找VB ...
- Python os.remove() 删除文件
概述 os.remove() 方法用于删除指定路径的文件.如果指定的路径是一个目录,将抛出OSError. 在Unix, Windows中有效 语法 remove()方法语法格式如下: os.remo ...
- (转!)利用Keras实现图像分类与颜色分类
2018-07-19 全部谷歌渣翻加略微修改 大家将就的看哈 建议大佬们还是看看原文 点击收获原文 其中用到的示例文件 multi-output-classification 大家可以点击 下载 . ...