这个,要处理各个数的话得先离散,我用的桶。

我们先把每个块里的和每个块区间的众数找出来,那么在查询的时候,可能成为[l,r]区间的众数的数只有中间区间的众数和两边的数。

证明:若不是这里的数连区间的众数都达不到。

我已开始把某个离散后的值当成了坐标,调了好久.......

#include<cstdio>
#include<cmath>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
int b[],a[],n,m,lon,pos[],t,p[],back[],num[],f[][],sz;
int cmp(const int x,const int y)
{
if(b[x]<b[y])return ;
if(b[x]==b[y]&&x<y)return ;
return ;
}
vector<int> place[];
inline void do_it(int x)
{
memset(num,,sizeof(num));
int who=,how=;
for(int i=(x-)*lon+;i<=n;i++)
{
num[a[i]]++;
if(num[a[i]]>how||(num[a[i]]==how&&back[a[i]]<back[who]))
who=a[i],how=num[a[i]];
f[x][pos[i]]=who;
}
}
inline void Init()
{
scanf("%d%d",&n,&m);
lon=(int)sqrt(n+0.5);
for(int i=;i<=n;i++)
{
scanf("%d",&b[i]);
p[i]=i;
pos[i]=(i-)/lon+;
}
sort(p+,p+n+,cmp);
for(int i=;i<=n;i++)
{
if(b[p[i]]!=b[p[i-]])
{
a[p[i]]=++sz;
back[sz]=b[p[i]];
}
else
a[p[i]]=sz;
place[sz].push_back(p[i]);
}
t=pos[n];
for(int i=;i<=t;i++)do_it(i);
}
inline int query(int l,int r,int x)
{
return upper_bound(place[x].begin(),place[x].end(),r)-lower_bound(place[x].begin(),place[x].end(),l);
}
inline int Min(int x,int y){return x<y?x:y;}
inline int work(int l,int r)
{
int z=pos[l]+,y=pos[r]-;
int who=f[z][y],how=query(l,r,who);
int zzh=(z-)*lon;
zzh=Min(zzh,r);
for(int i=l;i<=zzh;i++)
{
int x=query(l,r,a[i]);
if(x>how||(x==how&&a[i]<who))
who=a[i],how=x;
}
if(pos[l]!=pos[r])
{
zzh=(y*lon)+;
for(int i=zzh;i<=r;i++)
{
int x=query(l,r,a[i]);
if(x>how||(x==how&&a[i]<who))
who=a[i],how=x;
}
}
return back[who];
}
int main()
{
Init();
int k=;
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
x=(x+k-)%n+;
y=(y+k-)%n+;
if(x>y)x^=y^=x^=y;
k=work(x,y);
printf("%d\n",k);
}
return ;
}

bzoj2724: [Violet 6]蒲公英 分块 区间众数 论algorithm与vector的正确打开方式的更多相关文章

  1. BZOJ 2724: [Violet 6]蒲公英 [分块 区间众数]

    传送门 题面太美不忍不放 分块分块 这种题的一个特点是只有查询,通常需要预处理:加入修改的话需要暴力重构预处理 预处理$f[i][j]$为第i块到第j块的众数,显然$f[i][j]=max{f[i][ ...

  2. 【BZOJ 2724】 2724: [Violet 6]蒲公英 (区间众数不带修改版本)

    2724: [Violet 6]蒲公英 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 1908  Solved: 678 Description In ...

  3. BZOJ2724 [Violet 6]蒲公英 分块

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2724.html 题目传送门 - BZOJ2724 题意 求区间最小众数,强制在线. $n$ 个数,$m ...

  4. [BZOJ2724][Violet 6]蒲公英

    [BZOJ2724][Violet 6]蒲公英 试题描述 输入 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 输出 输入示 ...

  5. luogu4168蒲公英(区间众数)

    luogu4168蒲公英(区间众数) 给定n个数,m个区间询问,问每个询问中的众数是什么. 题面很漂亮,大家可以去看一下. 对于区间众数,由于区间的答案不能由子区间简单的找出来,所以似乎不能用树形结构 ...

  6. 蒲公英(bzoj2724)(分块+区间众数)

    Input Output Sample Input 6 3 1 2 3 2 1 2 1 5 3 6 1 5 Sample Output 1 2 1 HINT \(n <= 40000\),$ m ...

  7. 【BZOJ2724】[Violet 6]蒲公英 分块+二分

    [BZOJ2724][Violet 6]蒲公英 Description Input 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n ...

  8. 【bzoj2724】[Violet 6]蒲公英 分块+STL-vector

    题目描述 输入 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 输出 样例输入 6 3 1 2 3 2 1 2 1 5 3 ...

  9. bzoj2724: [Violet 6]蒲公英(离散化+分块)

    我好弱啊..这题调了2天QwQ 题目大意:给定一个长度为n(n<=40000)的序列,m(m<=50000)次询问l~r之间出现次数最多的数.(区间众数) 这题如果用主席树就可以不用处理一 ...

随机推荐

  1. Hadoop Eclipse 插件制作以及安装

    在本地使用Eclipse调试MapReduce程序,需要Hadoop插件,笔摘记录下制作安装过程. 准备工作(hadoop-2.6.0为例): 搭建好Hadoop环境 下载Hadoop安装包,解压到某 ...

  2. mysql根据二进制日志恢复数据/公司事故实战经验

    根据二进制日志恢复 目的:恢复数据,根据二进制日志将数据恢复到今天任意时刻 增量恢复,回滚恢复 如果有备份好的数据,将备份好的数据导入新数据库时,会随着产生二进制日志 先准备一台初始化的数据库 mys ...

  3. Kubernetes-深入分析集群安全机制

    Kubernetes过一系列机制来实现集群的安全机制,包括API Server的认证授权.准入控制机制及保护敏感信息的Secret机制等.集群的安全性必须考虑以下的几个目标: 保证容器与其所在宿主机的 ...

  4. (数据科学学习手札31)基于Python的网络数据采集(初级篇)

    一.简介 在实际的业务中,我们手头的数据往往难以满足需求,这时我们就需要利用互联网上的资源来获取更多的补充数据,但是很多情况下,有价值的数据往往是没有提供源文件的直接下载渠道的(即所谓的API),这时 ...

  5. shell重温---基础篇(参数传递&echo命令)

    经过前两天的学习,关于shell的基础算是知道的一般般啦,最起码不算是小白了(纯属意淫).今天就来点干货哈.   首先是运行shell脚本时的参数传递.脚本内获取参数的格式为$n.n代表了一个数字,例 ...

  6. git删除本地及远程分支

    1. 删除本地分支: git branch -d branchName 2. 删除远程分支: // 方法一:将删除的本地分支推到远程(要删除的远程分支在本地有映射) git push origin : ...

  7. 实用脚本 4 -- Makefile(不同文件下的多个可执行文件or静态库编译到同一目录下)

    不同文件下的多个可执行文件编译到同一目录下,这样方便观察编译结果,从而方便进程操作.使用时根据自己的需要在进行局部修改(如 链接库.目标文件等等). 1..bashrc 中设置编译主目录(例如) ex ...

  8. I/O Handler的管理(3)

    另外连接地址:http://blogs.readthedocs.org/zh_CN/latest/Handler_mgr.html 本章目录 I/O Handler的管理 IO句柄与Select_Re ...

  9. Git 上传本地仓库到码云

    一.将本地的项目上传到码云 1.码云上创建一个项目 testgit (名字随你) 2.本地创建一个文件夹D:/testgit,然后使用git bash 3.cd 到本地文件夹中D:/testgit 4 ...

  10. jmeter如何连接数据库

    大家都知道jmeter是java编写的,java/jmeter如果想连接数据库就要通过java database connector(JDBC)去连接,首先需先下载一个驱动 (mysql-connec ...