bzoj 2724: [Violet 6]蒲公英(分块预处理)
2724: [Violet 6]蒲公英
Time Limit: 40 Sec Memory Limit: 512 MB
Submit: 2464 Solved: 848
[Submit][Status][Discuss]
Description
Input
修正一下
l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1
Output
Sample Input
Sample Output
陈立杰的区间众数解题报告
这篇文章讲的非常好,我就不写题解了
看了秒懂,懂了秒过
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[50005], p[50005], bel[50005], B, sum[235][50005], zh[235][235], flag[50005];
int main(void)
{int n, m, i, j, cnt, x, y, bet, l, r, temp, ans;scanf("%d%d", &n, &m);cnt = 0;for(i=1;i<=n;i++){scanf("%d", &a[i]);p[++cnt] = a[i];}sort(p+1, p+cnt+1);cnt = unique(p+1, p+cnt+1)-(p+1);for(i=1;i<=n;i++)a[i] = lower_bound(p+1, p+cnt+1, a[i])-p;B = sqrt(n)+1;x = 1, y = 0;for(i=1;i<=n;i++){y += 1;sum[x][a[i]]++;bel[i] = x;if(y>B)y = 0, x++;}if(y==0)x--;B = x;for(i=1;i<=B;i++){for(j=1;j<=cnt;j++)sum[i][j] += sum[i-1][j];}for(i=1;i<=B;i++){bet = 0;for(j=1;j<=n;j++){if(bel[j]<i)continue;flag[a[j]]++;if(flag[a[j]]>bet || flag[a[j]]==bet && a[j]<temp)bet = flag[a[j]], temp = a[j];if(bel[j+1]!=bel[j])zh[i][bel[j]] = temp;}memset(flag, 0, sizeof(flag));}ans = 0;while(m--){scanf("%d%d", &l, &r);l = (l+ans-1)%n+1;r = (r+ans-1)%n+1;if(l>r)swap(l, r);bet = 0;if(bel[l]==bel[r] || bel[l]+1==bel[r]){for(i=l;i<=r;i++){flag[a[i]]++;if(flag[a[i]]>bet || flag[a[i]]==bet && a[i]<temp)bet = flag[a[i]], temp = a[i];}for(i=r;i>=l;i--)flag[a[i]] = 0;}else{for(i=l;bel[i]==bel[l];i++){flag[a[i]]++;if(flag[a[i]]==1)flag[a[i]] += sum[bel[r]-1][a[i]]-sum[bel[l]][a[i]];if(flag[a[i]]>bet || flag[a[i]]==bet && a[i]<temp)bet = flag[a[i]], temp = a[i];}for(i=r;bel[i]==bel[r];i--){flag[a[i]]++;if(flag[a[i]]==1)flag[a[i]] += sum[bel[r]-1][a[i]]-sum[bel[l]][a[i]];if(flag[a[i]]>bet || flag[a[i]]==bet && a[i]<temp)bet = flag[a[i]], temp = a[i];}x = zh[bel[l]+1][bel[r]-1];if(sum[bel[r]-1][x]-sum[bel[l]][x]>bet || sum[bel[r]-1][x]-sum[bel[l]][x]==bet && x<temp)temp = x;for(i=l;bel[i]==bel[l];i++)flag[a[i]] = 0;for(i=r;bel[i]==bel[r];i--)flag[a[i]] = 0;}ans = p[temp];printf("%d\n", ans);}return 0;
}
/*
17 550
1 1 1 1 2 2 4 4 3 3 4 4 5 5 5 5 4
10 10
*/
bzoj 2724: [Violet 6]蒲公英(分块预处理)相关推荐
- Bzoj 2724: [Violet 6]蒲公英(分块)
2724: [Violet 6]蒲公英 Time Limit: 40 Sec Memory Limit: 512 MB Description Input 修正一下 l = (l_0 + x - 1) ...
- bzoj 2724[Violet 6]蒲公英
2724: [Violet 6]蒲公英 Time Limit: 40 Sec Memory Limit: 512 MB Submit: 2630 Solved: 920 [Submit][Stat ...
- BZOJ 2724: [Violet 6]蒲公英
题目大意: 求区间众数,强制在线. 题解: 考虑分块,一段区间的众数一定在整块的众数和两边多出来的数中. 可能是众数的数有O(sqrt(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 ...
- [Luogu P4168] [BZOJ 2724] [Violet]蒲公英
洛谷传送门 BZOJ传送门 题目背景 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也 ...
- [BZOJ2724][Violet 6]蒲公英
[BZOJ2724][Violet 6]蒲公英 试题描述 输入 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 输出 输入示 ...
- BZOJ 2724蒲公英 (分块) 【内有块大小证明】
题面 luogu传送门 分析 先分块,设块大小为x(之后我们会证明块大小取何值会更优) 步骤1 把所有的数离散化,然后对每个值开一个vector pos[i],pos[i]存储数i出现的位置 我们设查 ...
- Luogu P4168 [Violet]蒲公英(分块)
P4168 [Violet]蒲公英 题意 题目背景 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还 ...
- 【分块】【Violet】蒲公英
[描述] 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也被它杀掉了.我觉得把那么可怕 ...
最新文章
- 【十大经典排序算法】java实现--希尔排序(4)
- 使用命令行导出 SQL Server 数据层应用程序
- 200多个恶意NPM程序包针对Azure 开发人员,发动供应链攻击
- 什么是AWT_Swing_Scroll面板,上!!!
- Sun JVM 内存管理、参数与调优、内存分配与回收策略、GC 日志配置使用详解
- OpenSSL密码库算法笔记——第1章 大整数的基本运算
- 中国历史37位奇女子
- [经验栈]C#与是德科技信号发生器(Keysight RF Signal Generators)N9310A通信操作
- H3C新华三笔记本FN键锁定
- 薅羊毛php源码,基于AutoJs实现的薅羊毛App专业版源码大分享---更新啦
- webmagic保存html页面,WebMagic抓取前端Ajax渲染的页面
- WordPress | QQ互联授权登录
- 干货:饿了么交易系统的重构和实战
- 阿里云购买云服务器流程及注意事项(新用户必看图文教程)
- 注册表各键值保存的内容及其对用的作用(功能)(不完善,有补充的评论指出供大家学习参考)
- java皮丘 博客园,又一个设计工具 Framer X Preview
- 微型计算机控制数字量输入输出,[工学]WX_微型计算机控制技术_第二章5.ppt
- 视觉检测3D相机 平面度检测
- LiFi比WiFi快100倍:它如何运作,实际应用靠谱吗
- 数据库学习笔记:事务的特性和隔离级别
热门文章
- 为什么都建议学java而不是python-为什么入门大数据选择Python而不是Java?
- 自学python能找到工作吗-学习完Python后真的能找到工作吗?老男孩Python培训班
- python怎么读写文件-怎么用python读取和写入TIFF文件1
- python编程入门教学-史上最全Python编程基础入门教程
- python学习手册-Python学习手册
- python有哪些用途-Python语言有哪些用途
- 电子科技大学计算机课程表,电子科技大学课表.doc
- 空间说说秒赞java_人生靠反省,Java靠泛型
- python 网页设计_使用Python制作获取网站目录的图形化程序
- 【python 笔记】赋值语句和基本输入输出