codeforces

一句话题意

求区间数字出现次数的mex,带修改

sol

带修膜队不解释

带修膜队的排序!

  1. struct query{
  2. int id,l,r,t;
  3. bool operator < (const query &b) const
  4. {
  5. if (l/block!=b.l/block) return l/block<b.l/block;
  6. if (r/block!=b.r/block) return r/block<b.r/block;
  7. return t<b.t;
  8. }
  9. }q1[N];

左端点所在块为第一关键字,右端点所在块为第二关键字,操作版本为第三关键字。

块的大小是\(n^{\frac{2}{3}}\),复杂度是\(O(n^{\frac{5}{3}})\)

然后就是离散化数组要开两倍

code

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cmath>
  4. using namespace std;
  5. int gi()
  6. {
  7. int x=0,w=1;char ch=getchar();
  8. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  9. if (ch=='-') w=0,ch=getchar();
  10. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  11. return w?x:-x;
  12. }
  13. const int N = 2e5+5;
  14. int n,m,block,gen,a[N],b[N],o[N],cnt1,cnt2,len,vis[N],cnt[N],num[N],t[N],ans[N];
  15. struct query{
  16. int id,l,r,t;
  17. bool operator < (const query &b) const
  18. {
  19. if (l/block!=b.l/block) return l/block<b.l/block;
  20. if (r/block!=b.r/block) return r/block<b.r/block;
  21. return t<b.t;
  22. }
  23. }q1[N];
  24. struct modify{int pos,val,pre;}q2[N];
  25. void update(int x)
  26. {
  27. --num[cnt[a[x]]];
  28. if (num[cnt[a[x]]]==0) --t[cnt[a[x]]/gen];
  29. if (!vis[x]) ++cnt[a[x]];else --cnt[a[x]];
  30. vis[x]^=1;
  31. ++num[cnt[a[x]]];
  32. if (num[cnt[a[x]]]==1) ++t[cnt[a[x]]/gen];
  33. }
  34. void change(int x,int v)
  35. {
  36. if (!vis[x]) a[x]=v;
  37. else update(x),a[x]=v,update(x);
  38. }
  39. int calc()
  40. {
  41. for (int i=0;;++i)
  42. if (t[i]<gen)
  43. for (int j=i*gen;;++j)
  44. if (!num[j]) return j;
  45. }
  46. int main()
  47. {
  48. n=gi();m=gi();block=pow(n,0.666);gen=pow(n,0.5);
  49. for (int i=1;i<=n;++i) a[i]=b[i]=o[++len]=gi();
  50. for (int i=1;i<=m;++i)
  51. {
  52. int opt=gi(),l=gi(),r=gi();
  53. if (opt==1) q1[++cnt1]=(query){cnt1,l,r,cnt2};
  54. else q2[++cnt2]=(modify){l,r,b[l]},b[l]=o[++len]=r;
  55. }
  56. sort(o+1,o+len+1);len=unique(o+1,o+len+1)-o-1;
  57. for (int i=1;i<=n;++i) a[i]=lower_bound(o+1,o+len+1,a[i])-o;
  58. for (int i=1;i<=cnt2;++i)
  59. {
  60. q2[i].val=lower_bound(o+1,o+len+1,q2[i].val)-o;
  61. q2[i].pre=lower_bound(o+1,o+len+1,q2[i].pre)-o;
  62. }
  63. sort(q1+1,q1+cnt1+1);
  64. int L=1,R=0,X=1;num[0]=1e9;t[0]=1;//出现了0次的数字有无限多个
  65. for (int i=1;i<=cnt1;++i)
  66. {
  67. while (X<q1[i].t) ++X,change(q2[X].pos,q2[X].val);
  68. while (X>q1[i].t) change(q2[X].pos,q2[X].pre),--X;
  69. while (L>q1[i].l) update(--L);
  70. while (R<q1[i].r) update(++R);
  71. while (L<q1[i].l) update(L++);
  72. while (R>q1[i].r) update(R--);
  73. ans[q1[i].id]=calc();
  74. }
  75. for (int i=1;i<=cnt1;++i) printf("%d\n",ans[i]);
  76. return 0;
  77. }

[CF940F]Machine Learning的更多相关文章

  1. CF940F Machine Learning 带修改莫队

    题意:支持两种操作:$1.$ 查询 $[l,r]$ 每个数字出现次数的 $mex$,$2.$ 单点修改某一位置的值. 这里复习一下带修改莫队. 普通的莫队中,以左端点所在块编号为第一关键字,右端点大小 ...

  2. CF940F Machine Learning(带修莫队)

    首先显然应该把数组离散化,然后发现是个带修莫队裸题,但是求mex比较讨厌,怎么办?其实可以这样求:记录每个数出现的次数,以及出现次数的出现次数.至于求mex,直接暴力扫最小的出现次数的出现次数为0的正 ...

  3. 【题解】CF940F Machine Learning

    Link 题目大意:单点修改,每次询问一个区间的所有颜色出现次数的\(\text{Mex}.\) 例如,区间中三种颜色分别出现了\(2,2,3\)次,又因为其他颜色出现次数一定是\(0\),所以这里的 ...

  4. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  5. 【Machine Learning】Python开发工具:Anaconda+Sublime

    Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...

  6. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  7. 【Machine Learning】决策树案例:基于python的商品购买能力预测系统

    决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...

  8. 【机器学习Machine Learning】资料大全

    昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...

  9. [Machine Learning] Active Learning

    1. 写在前面 在机器学习(Machine learning)领域,监督学习(Supervised learning).非监督学习(Unsupervised learning)以及半监督学习(Semi ...

随机推荐

  1. [Python Study Notes]WdSaveFormat 枚举

    WdSaveFormat 枚举 指定要在保存文档时使用的格式. 版本信息 已添加版本: 名称 值 说明 wdFormatDocument 0 Microsoft Word 格式. wdFormatDO ...

  2. PHP读取大文本文件并处理数据的思路

    //处理文件 $file = fopen($filename, "r") or exit("Unable to open file!"); $total_lin ...

  3. python并发编程之多进程(二):互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型

    一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...

  4. 将Word表格中单元格中的文字替换成对应的图片

    示例 原文件结构: 替换后文档结构: 软件截图: 代码: using System;using System.Collections.Generic;using System.ComponentMod ...

  5. ubuntu16.04 python3 安装selenium及环境配置

    环境 ubuntu16.04 python3 安装selenium sudo pip3 install seleium 默认安装完是支持firefox,但是更新得太慢对于较新的firefox已经不支持 ...

  6. applicationContext.xml最基本配置文件

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  7. GCC精彩之旅_1

    说明: 本文共两篇,转自GCC精彩之旅.第一篇着重介绍GCC编译一个程序的过程与优化,第二篇侧重在GCC结合GDB对代码的调试. 在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎 ...

  8. 彻底解决Yii2中网页刷新时验证码不刷新的问题

    修改vendor/yiisoft/yii2/captcha/CaptchaValidator.php这个文件就可以了,修改的地方见下图: 总结 归根到底,是因为yii2在渲染网页的时候,会先输出js验 ...

  9. java线程间通信1--简单实例

    线程通信 一.线程间通信的条件 1.两个以上的线程访问同一块内存 2.线程同步,关键字 synchronized 二.线程间通信主要涉及的方法 wait(); ----> 用于阻塞进程 noti ...

  10. Python 实现单例模式的一些思考

    一.问题:Python中如何实现单例模式 单例模式指一个类只能实例化一个对象. 二.解决方案: 所有资料参考于: http://python.jobbole.com/87294/ https://ww ...