在线版区间众数 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 ...
随机推荐
- jq中的事件委托:closest,parent,parents,delegate
closest .closest(selector) 从当前元素开始沿 DOM 树向上,获得匹配第一个符合选择器的祖先元素,返回零个或一个元素的 jQuery 对象. .parents() 和 .cl ...
- oracle存储过程---创建存储过程语句
一.创建存储过程语句 语法: CREATE OR REPLACE PROCEDURE testname( argument1 TYPE1, .... ) AS BEGIN ...... END ...
- Javascript入门(四)条件控制语句
一.条件控制语句 1. if <script type="text/javascript"> var num = 1 if( num == 3 ){ alert(&qu ...
- #6284. 数列分块入门 8(区间询问等于一个数 cc 的元素,并将这个区间的所有元素改为 c)
题目链接:https://loj.ac/problem/6284 题目大意:中文题目 具体思路:还是和sqrt那个题的思路相同的,标记每一块的值是不是相同的,注意lazy下标的下放. AC代码: #i ...
- shell编程 之 流程控制(条件语句和循环语句)
1 if ...else... 基本格式: if condition then commend else commend fi 当然也可以写到一行,用[ ]表明边界,用:表示分行.比如: if [ $ ...
- Nginx系列2:用Nginx搭建一个可用的静态资源Web服务器
上一节中编译好自己的nginx服务器后, 现在要对nginx.conf文件进行配置,搭建一个可用的静态资源Web服务器 1.放入可访问的html文件到nginx文件夹下,如图1所示: 这里我放入的是一 ...
- spring boot 笔记1
demon 目录,公共配置 SbMybatisApplication.java package com.example.sb_mybatis; import org.mybatis.spring.an ...
- [转] 解决Driver/library version mismatch
跑模型 torch.cuda.is_available()返回 False nvidia-smi返回:Failed to initialize NVML: Driver/library version ...
- 使用SpringSocial开发微信登录
⒈编写微信用户对应的数据结构 package cn.coreqi.social.weixin.entities; /** * 微信用户实体类 */ public class WeixinUserInf ...
- python3.7 contextvars在asyncio使用的
from contextvars import ContextVar import asyncio import random cv = ContextVar('cv') async def wait ...