P4168 (静态分块

题意:区间众数,强制在线

思路:离线考虑莫队,在线考虑静态分块。块之间的贡献不独立, a n s [ i ] [ j ] ans[i][j] ans[i][j]表示块 [ i , j ] [i,j] [i,j]中的众数, m x [ i ] [ j ] mx[i][j] mx[i][j]表示众数的出现次数,通过增量法求解, O ( n 2 / B ) O(n^2/B) O(n2/B)考虑块与块之间的影响,用 c n t [ i ] [ j ] cnt[i][j] cnt[i][j]表示前 i i i个块中 j j j的出现次数

  • 查询

    用散块暴力更新看是否对整块的答案有所贡献即可 $O(B+n/B) $ 块大小为 n \sqrt n n ​的时候时空复杂度为 O ( n n ) O(n\sqrt n) O(nn ​)

    注意这题值域需要离散化

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=40005;
    int cnt[250][maxn],mx[250][250],ans[250][250],tmp[maxn];
    int a[maxn],n,m,big,pos[maxn],num,L[250],R[250],b[maxn],id[maxn],c;
    void init(){big=sqrt(n);num=(n-1)/big+1;for(int i=1;i<=num;++i){L[i]=(i-1)*big+1;R[i]=i*big;}R[num]=n;for(int i=1;i<=num;++i)for(int j=L[i];j<=R[i];++j)pos[j]=i;sort(b+1,b+1+n);c=unique(b+1,b+1+n)-(b+1);for(int i=1;i<=n;++i){int x=lower_bound(b+1,b+1+c,a[i])-b;id[x]=a[i];a[i]=x;}for(int i=1;i<=n;++i){cnt[pos[i]][a[i]]++;} for(int i=2;i<=num;++i){for(int j=1;j<=c;++j)cnt[i][j]+=cnt[i-1][j];}for(int i=1;i<=num;++i){int x=0,z=0;//mx ansfor(int j=L[i];j<=n;++j){tmp[a[j]]++;if(tmp[a[j]]>x)x=tmp[a[j]],z=a[j];else if(tmp[a[j]]==x&&z!=a[j]){z=min(z,a[j]);}mx[i][pos[j]]=x;ans[i][pos[j]]=z;}for(int j=L[i];j<=n;++j)tmp[a[j]]--;}
    }
    int query(int l,int r){int pl=pos[l],pr=pos[r];if(pl==pr){int x=0,z=0;for(int i=l;i<=r;++i){tmp[a[i]]++;if(tmp[a[i]]>x)x=tmp[a[i]],z=a[i];else if(tmp[a[i]]==x&&z!=a[i]){z=min(z,a[i]);}}for(int i=l;i<=r;++i)tmp[a[i]]--;return z;}else{int x=mx[pl+1][pr-1],z=ans[pl+1][pr-1];for(int i=l;i<=R[pl];++i)tmp[a[i]]=cnt[pr-1][a[i]]-cnt[pl][a[i]];for(int i=l;i<=R[pl];++i){tmp[a[i]]++;if(tmp[a[i]]>x)x=tmp[a[i]],z=a[i];else if(tmp[a[i]]==x&&a[i]!=z)z=min(z,a[i]);}for(int i=L[pr];i<=r;++i)tmp[a[i]]=tmp[a[i]]?tmp[a[i]]:cnt[pr-1][a[i]]-cnt[pl][a[i]];for(int i=L[pr];i<=r;++i){tmp[a[i]]++;if(tmp[a[i]]>x)x=tmp[a[i]],z=a[i];else if(tmp[a[i]]==x&&a[i]!=z)z=min(z,a[i]);}for(int i=l;i<=R[pl];++i)tmp[a[i]]=0;for(int i=L[pr];i<=r;++i)tmp[a[i]]=0;return z;}
    }
    int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;++i)scanf("%d",&a[i]),b[i]=a[i];init();int l,r,anss=0;for(int i=1;i<=m;++i){scanf("%d%d",&l,&r);l=(l+anss-1)%n+1;r=(r+anss-1)%n+1;if(l>r)swap(l,r);cout<<(anss=id[query(l,r)])<<"\n";}return 0;
    }
    

P4168 (静态分块相关推荐

  1. P4168 [Violet] 分块 + 二分

    题意 传送门 P4168 [Violet]蒲公英 题解 在线求区间众数问题.考虑分块,假设将整个区间分为 T T T 块,块 i i i 的边界为 [ L [ i ] , R [ i ] ) [L[i ...

  2. [BZOJ4763][P3603]雪辉[手写bitset+静态分块]

    题意:给一个n个点的树,点有点权,有m次询问,每次询问多条链的并有多少种不同的点权以及它的mex mex就是一个集合中最小的没有出现的非负整数,注意0要算 rand出 \(\sqrt n\)个点,把每 ...

  3. 随机生成稀疏矩阵_面向异构众核超级计算机的大规模稀疏计算性能优化研究

    点击上方蓝字关注我们 面向异构众核超级计算机的大规模稀疏计算性能优化研究 胡正丁, 薛巍 清华大学计算机科学与技术系,北京 100084 论文引用格式: 胡正丁, 薛巍.面向异构众核超级计算机的大规模 ...

  4. 面向异构众核超级计算机的大规模稀疏计算性能优化研究

    点击上方蓝字关注我们 面向异构众核超级计算机的大规模稀疏计算性能优化研究 胡正丁, 薛巍 清华大学计算机科学与技术系,北京 100084 论文引用格式: 胡正丁, 薛巍.面向异构众核超级计算机的大规模 ...

  5. 重复数据删除技术概述

    重复数据删除技术概述 一.   重复数据删除的分类 1.       源端重复数据删除和目标端重复数据删除 源端消重在数据源进行,传输的是已经消重后的数据,能够节省网络带宽,但会占用大量源端系统资源. ...

  6. Luogu P4168 [Violet]蒲公英(分块)

    P4168 [Violet]蒲公英 题意 题目背景 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还 ...

  7. Python图片转gif(将静态图转化为分块加载的动态图)

    简介 将静态图转化为分块加载的动态图 方案 1. PIL: 1. 创建背景图2. 将原图拆分成N块并依次合成到背景图的相应位置, 得到N张素材图3. 将N张素材图合成GIF2. pygifsicle对 ...

  8. 【洛谷P4168】蒲公英【分块】

    题目大意: 题目链接:https://www.luogu.org/problemnew/show/P4168 给出一个长度为 n n n的序列, m m m次询问,求区间 [ l , r ] [l,r ...

  9. 【题解】洛谷P4168 [Violet]蒲公英 (分块)

    [题解]洛谷P4168 [Violet]蒲公英 (分块)     D e s c r i p t i o n \rm Description Description 我们把所有的蒲公英看成一个长度为 ...

最新文章

  1. computed set 自定义参数_完全理解Vue的渲染watcher、computed和user watcher
  2. GIT_忽略文件和属性文件配置
  3. 某程序员吐槽:分手一个月,发现前女友和一个已婚男人在一起,愤而向他们公司举报,该男已被开除!网友:举报别人不道德!...
  4. ipch文件夹和.sdf文件
  5. 线下活动 | 揭秘大数据背后的京东虚拟平台(免费报名中)
  6. python消息队列celery高可用_分布式消息队列-Celery
  7. C语言学习之编写一个C程序,运行时输人abc三个值,输出其中值最大者。
  8. FIR仿真module_04
  9. java 7.函数-递归_带有谓词的Java中的函数样式-第2部分
  10. CVE-2019-0708 BlueKeep的扫描和打补丁
  11. ubuntu新建用户后,终端下方向键和tab键不可用的解决方法
  12. JavaScript权威设计--JavaScript表达式与运算符(简要学习笔记五)
  13. Node中POST请求的正确处理方式
  14. 使用 .NET 平台,如何玩转 Universal Windows 应用? 1
  15. linux shell 递归统计代码行数
  16. 十大经典算法图解(详细版)
  17. 支付宝PC(二维码扫码)支付(Java开发)完整版
  18. IBM与广东中医院 携手共建智慧医疗
  19. ios内存管理(整理篇)
  20. 5款移动开发轻量jQuery的替代品

热门文章

  1. OpenCV相机自动对焦代码整理
  2. 王者荣耀s14服务器维护时间,王者荣耀S14具体开启时间 王者荣耀S14赛季什么时候开...
  3. 第4关:字符串中各类字符数的统计-------C语言程序设计技术(循环结构程序设计1)
  4. 计算机机房中的电脑怎么断开网络,机房电脑怎么解除控制
  5. 华为机试真题 C++ 实现【免单统计】
  6. 谷歌云端硬盘 转存_如何整理您的Google云端硬盘
  7. iOS基于chroot的内核级绕过App的越狱检测
  8. IDEA启动报Failed to create JVM. JVM Path错问题解决
  9. 扫盲:-zilla的来源
  10. Android 颜色渐变 属性动画