bzoj2724: [Violet 6]蒲公英 分块 区间众数 论algorithm与vector的正确打开方式
这个,要处理各个数的话得先离散,我用的桶。
我们先把每个块里的和每个块区间的众数找出来,那么在查询的时候,可能成为[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的正确打开方式的更多相关文章
- BZOJ 2724: [Violet 6]蒲公英 [分块 区间众数]
传送门 题面太美不忍不放 分块分块 这种题的一个特点是只有查询,通常需要预处理:加入修改的话需要暴力重构预处理 预处理$f[i][j]$为第i块到第j块的众数,显然$f[i][j]=max{f[i][ ...
- 【BZOJ 2724】 2724: [Violet 6]蒲公英 (区间众数不带修改版本)
2724: [Violet 6]蒲公英 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 1908 Solved: 678 Description In ...
- BZOJ2724 [Violet 6]蒲公英 分块
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2724.html 题目传送门 - BZOJ2724 题意 求区间最小众数,强制在线. $n$ 个数,$m ...
- [BZOJ2724][Violet 6]蒲公英
[BZOJ2724][Violet 6]蒲公英 试题描述 输入 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 输出 输入示 ...
- luogu4168蒲公英(区间众数)
luogu4168蒲公英(区间众数) 给定n个数,m个区间询问,问每个询问中的众数是什么. 题面很漂亮,大家可以去看一下. 对于区间众数,由于区间的答案不能由子区间简单的找出来,所以似乎不能用树形结构 ...
- 蒲公英(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 ...
- 【BZOJ2724】[Violet 6]蒲公英 分块+二分
[BZOJ2724][Violet 6]蒲公英 Description Input 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n ...
- 【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 ...
- bzoj2724: [Violet 6]蒲公英(离散化+分块)
我好弱啊..这题调了2天QwQ 题目大意:给定一个长度为n(n<=40000)的序列,m(m<=50000)次询问l~r之间出现次数最多的数.(区间众数) 这题如果用主席树就可以不用处理一 ...
随机推荐
- 23.3.3 Web存储机制【JavaScript高级程序设计第三版】
Web Storage 最早是在Web 超文本应用技术工作组(WHAT-WG)的Web 应用1.0 规范中描述的. 这个规范的最初的工作最终成为了HTML5 的一部分.Web Storage 的目的是 ...
- Git----将本地代码推送到远程仓库
1.初始化本地 git init 2.添加文件 -A等于 -. 和-a的集合 git add -A 3.提交 git commit -m 'add' 4.关联到远程库 git remote add o ...
- Volatile的详解
volatile关键字修饰的共享变量主要有两个特点:1.保证了不同线程访问的内存可见性 2.禁止重排序 在说内存可见性和有序性之前,我们有必要看一下Java的内存模型(注意和JVM内存模型的区分 ...
- hadoop搭建----centos免密码登录、修改hosts文件
分布式系统在传输数据时需要多台电脑免密码登录 如:A(192.168.227.12)想ssh免密码登录到B(192.168.227.12),需要把A的公钥文件(~/.ssh/id_rsa.pub)里内 ...
- WordPress4.9 最新版本网站安全漏洞详情与修复
wordpress 目前互联网的市场占有率较高,许多站长以及建站公司都在使用这套开源的博客建站系统来设计网站,wordpress的优化以及html静态化,深受google以及搜索引擎的喜欢,全世界大约 ...
- Java学习笔记二:Java开发工具Eclipse的安装与使用
Java开发工具Eclipse的安装与使用 正如office一样我们在开发java语言过程中同样需要依款不错的开发工具,目前市场上的IDE很多,这里只演示Eclipse的安装: 一:下载软件: 1.下 ...
- mysql5.6主主复制及keepalived 高可用
1.实验目的 mysql服务器作为生产环境中使用最广泛的数据库软件,以其开源性,稳定性而广泛使用,但同时由于数据存储,读写频率高,极易造成数据库出错,从而给企业造成不可挽回的损失,我们除了做好数据库的 ...
- R语言学习笔记(四):apply,sapply,lapply,tapply,vapply以及mapply的用法
apply() apply(m,dimcode,f,fargs) m 是一个矩阵. dimcode是维度编号,取1则为对行应用函数,取2则为对列运用函数. f是函数 fargs是f的可选参数集 > ...
- 详解 RPL、DPL、CPL 的关系
保护模式中最重要的一个思想就是通过分级把代码隔离了起来,不同的代码在不同的级别,使大多数情况下都只和同级代码发生关系.Intel的80286以上的cpu可以识別4个特权级(或特权层) ,0级到3级.数 ...
- 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(四):安装MySQL数据库
基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...