蒲公英(bzoj 2724)
Description
.gif)
Input
.gif)
修正一下
l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1
Output
.gif)
Sample Input
1 2 3 2 1 2
1 5
3 6
1 5
Sample Output
2
1
HINT
.gif)
修正下:
n <= 40000, m <= 50000
/*
区间的是完整的所有块的众数,和不完整块中出现的数。
先预处理出每块的众数,对于不完整的,直接扫就可以。
那么只要能快速得出一个数在某个区间内出现次数即可。
*/
#include<cstdio>
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#include<map>
#define N 50010
using namespace std;
int n,m,val[N],v[N],bl[N],f[][],cnt[N],blo=,id;
vector<int> grap[N];
map<int,int> mp;
void init(int x){
memset(cnt,,sizeof(cnt));
int mx=,ans=;
for(int i=(x-)*blo+;i<=n;i++){
cnt[v[i]]++;
if(cnt[v[i]]>mx||(cnt[v[i]]==mx&&val[v[i]]<val[ans]))
mx=cnt[v[i]],ans=v[i];
f[x][bl[i]]=ans;
}
}
int querysum(int a,int b,int x){
return upper_bound(grap[x].begin(),grap[x].end(),b)-lower_bound(grap[x].begin(),grap[x].end(),a);
}
int query(int a,int b){
int ans=f[bl[a]+][bl[b]-];
int mx=querysum(a,b,ans);
for(int i=a;i<=min(bl[a]*blo,b);i++){
int t=querysum(a,b,v[i]);
if(t>mx||(t==mx&&val[v[i]]<val[ans]))
mx=t,ans=v[i];
}
if(bl[a]!=bl[b]){
for(int i=(bl[b]-)*blo+;i<=b;i++){
int t=querysum(a,b,v[i]);
if(t>mx||(t==mx&&val[v[i]]<val[ans]))
mx=t,ans=v[i];
}
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&v[i]);
if(!mp[v[i]]){
mp[v[i]]=++id;
val[id]=v[i];
}
v[i]=mp[v[i]];
grap[v[i]].push_back(i);
}
for(int i=;i<=n;i++)bl[i]=(i-)/blo+;
for(int i=;i<=bl[n];i++)init(i);
int ans=;
for(int i=;i<=m;i++){
int a,b;scanf("%d%d",&a,&b);
a=(a+ans-)%n+;b=(b+ans-)%n+;
if(a>b)swap(a,b);
ans=val[query(a,b)];
printf("%d\n",ans);
}
return ;
}
蒲公英(bzoj 2724)的更多相关文章
- [BZOJ 2724] [Violet 6] 蒲公英 【分块】
题目链接:BZOJ - 2724 题目分析 这道题和 BZOJ-2821 作诗 那道题几乎是一样的,就是直接分块,每块大小 sqrt(n) ,然后将数字按照数值为第一关键字,位置为第二关键字排序,方便 ...
- BZOJ 2724: [Violet 6]蒲公英
2724: [Violet 6]蒲公英 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 1633 Solved: 563[Submit][Status ...
- BZOJ 2724: [Violet 6]蒲公英( 分块 )
虽然AC了但是时间惨不忍睹...不科学....怎么会那么慢呢... 无修改的区间众数..分块, 预处理出Mode[i][j]表示第i块到第j块的众数, sum[i][j]表示前i块j出现次数(前缀和, ...
- 【BZOJ 2724】 2724: [Violet 6]蒲公英 (区间众数不带修改版本)
2724: [Violet 6]蒲公英 Time Limit: 40 Sec Memory Limit: 512 MBSubmit: 1908 Solved: 678 Description In ...
- 【刷题】BZOJ 2724 [Violet 6]蒲公英
Description Input 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 Output Sample Input ...
- 【BZOJ 2724】 蒲公英
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2724 [算法] 分块算法在线维护区间众数 分块算法的精髓就在于 : 大段维护,局部朴 ...
- BZOJ 2724: [Violet 6]蒲公英 [分块 区间众数]
传送门 题面太美不忍不放 分块分块 这种题的一个特点是只有查询,通常需要预处理:加入修改的话需要暴力重构预处理 预处理$f[i][j]$为第i块到第j块的众数,显然$f[i][j]=max{f[i][ ...
- bzoj 2724 蒲公英 分块
分块,预处理出每两个块范围内的众数,然后在暴力枚举块外的进行比较 那么怎么知道每一个数出现的次数呢?离散后,对于每一个数,维护一个动态数组就好了 #include<cstdio> #inc ...
- BZOJ.2724.[Violet 6]蒲公英(静态分块)
题目链接 区间众数 强制在线 考虑什么样的数会成为众数 如果一个区间S1的众数为x,那么S1与新区间S2的并的众数只会是x或S2中的数 所以我们可以分块先预处理f[i][j]表示第i到第j块的众数 对 ...
- BZOJ 2724 蒲公英 | 分块模板题
题意 给出一个序列,在线询问区间众数.如果众数有多个,输出最小的那个. 题解 这是一道分块模板题. 一个询问的区间的众数,可能是中间"整块"区间的众数,也可能是左右两侧零散的数中的 ...
随机推荐
- 运行powershell 脚本 在此系统上禁止运行脚本
解决方法: 首次在计算机上启动 Windows PowerShell 时,现用执行策略很可能是 Restricted(默认设置). Restricted 策略不允许任何脚本运行. 若要了解计算机上的现 ...
- Xamarin.IOS binding库编译失败的解决办法
报错:目标框架 Xamarin.iOS,Version=v1.0 未找到 复制 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professi ...
- ubuntu 16.0安装 hadoop2.8.3
环境:ubuntu 16.0 需要软件:jdk ssh https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/ 2.8.3 安装 jdk并 ...
- Docker镜像的目录存储讲解
我们成功安装完docker后,执行命令行sudo docker run hello-world, 如果是第一次执行,则会从远程拉取hello-world的镜像到本地,然后运行,显示hello worl ...
- Netbeans使用笔记
Netbeans 新建项目 A brand new project 选择"文件">"新建项目"以打开新建项目向导. 在向导中,选择 "C/C++ ...
- Data truncation: Data too long for column 'id' at row 1
Caused by: java.sql.BatchUpdateException: Data truncation: Data too long for column 'titleimg' at ro ...
- java面试基础篇(三)
1.Q:ArrayList 和 LinkedList 有什么区别? A:ArrayList查询快!LinkedList增删快.ArrayList是基于索引的数据接口,它的底层是数组.空间占用相对小一些 ...
- Noip2011提高组 聪明的质监员
题目传送门 讲真,既然质监员这么聪明,为什么要让我们帮他设计程序? 所以还是叫ZZ的质检员吧 其实,我最想说的,不是这个题,而是这个\(\Sigma\)(一见 \(\Sigma\) 就懵逼系列) 这个 ...
- javase(14)_java基础增强
一.Eclipse的使用 1.在eclipse下Java程序的编写和run as,debug as,及java运行环境的配置. 2.快捷键的配置,常用快捷键: •内容提示:Alt + / •快速修复: ...
- ThinkPHP项目怎么运行?
1.下载ThinkPHP项目 2.安装核心框架framework 3.配置集成开发环境:wamp或者xampp或者phpStudy