codeforces

一句话题意

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

sol

带修膜队不解释

带修膜队的排序!

struct query{
int id,l,r,t;
bool operator < (const query &b) const
{
if (l/block!=b.l/block) return l/block<b.l/block;
if (r/block!=b.r/block) return r/block<b.r/block;
return t<b.t;
}
}q1[N];

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

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

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

code

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int gi()
{
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
const int N = 2e5+5;
int n,m,block,gen,a[N],b[N],o[N],cnt1,cnt2,len,vis[N],cnt[N],num[N],t[N],ans[N];
struct query{
int id,l,r,t;
bool operator < (const query &b) const
{
if (l/block!=b.l/block) return l/block<b.l/block;
if (r/block!=b.r/block) return r/block<b.r/block;
return t<b.t;
}
}q1[N];
struct modify{int pos,val,pre;}q2[N];
void update(int x)
{
--num[cnt[a[x]]];
if (num[cnt[a[x]]]==0) --t[cnt[a[x]]/gen];
if (!vis[x]) ++cnt[a[x]];else --cnt[a[x]];
vis[x]^=1;
++num[cnt[a[x]]];
if (num[cnt[a[x]]]==1) ++t[cnt[a[x]]/gen];
}
void change(int x,int v)
{
if (!vis[x]) a[x]=v;
else update(x),a[x]=v,update(x);
}
int calc()
{
for (int i=0;;++i)
if (t[i]<gen)
for (int j=i*gen;;++j)
if (!num[j]) return j;
}
int main()
{
n=gi();m=gi();block=pow(n,0.666);gen=pow(n,0.5);
for (int i=1;i<=n;++i) a[i]=b[i]=o[++len]=gi();
for (int i=1;i<=m;++i)
{
int opt=gi(),l=gi(),r=gi();
if (opt==1) q1[++cnt1]=(query){cnt1,l,r,cnt2};
else q2[++cnt2]=(modify){l,r,b[l]},b[l]=o[++len]=r;
}
sort(o+1,o+len+1);len=unique(o+1,o+len+1)-o-1;
for (int i=1;i<=n;++i) a[i]=lower_bound(o+1,o+len+1,a[i])-o;
for (int i=1;i<=cnt2;++i)
{
q2[i].val=lower_bound(o+1,o+len+1,q2[i].val)-o;
q2[i].pre=lower_bound(o+1,o+len+1,q2[i].pre)-o;
}
sort(q1+1,q1+cnt1+1);
int L=1,R=0,X=1;num[0]=1e9;t[0]=1;//出现了0次的数字有无限多个
for (int i=1;i<=cnt1;++i)
{
while (X<q1[i].t) ++X,change(q2[X].pos,q2[X].val);
while (X>q1[i].t) change(q2[X].pos,q2[X].pre),--X;
while (L>q1[i].l) update(--L);
while (R<q1[i].r) update(++R);
while (L<q1[i].l) update(L++);
while (R>q1[i].r) update(R--);
ans[q1[i].id]=calc();
}
for (int i=1;i<=cnt1;++i) printf("%d\n",ans[i]);
return 0;
}

[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. 网络编程基础+UDP的实现

    网络地址分类(32位网络地址) A类地址:第一个字节为网络地址,其他3个字节主机地址,第一字节的最高位固定为0 从1.0.0.1------126.255.255.255 B类地址:第一字节和第二字节 ...

  2. CocosCreator游戏开发---菜鸟学习之路(一)

    PS(废话): 辞职后在家好久好久了,久到经济不允许了,接着就准备再次出去找工作了,然而工作哪有那么好找,特别是像我这种菜鸟.而且我还准备转行,准备去做游戏,技能等级接近于0,那工作就更难找了.既然如 ...

  3. Maven文件配置

    Maven文件路径的配置 默认设置 修改之后的设置 Maven文件内容的配置 对于Maven 的 settings.xml 文件,需要注意. <mirror>镜像元素之间是互斥的,优先级是 ...

  4. 哪些CSS是可以被继承的--简单整理

    那些CSS是可以被继承的--简单整理1.文本相关属性是继承的:font-size,font-family,line-height,text-index等2.列表相关属性是继承的:list-style- ...

  5. 撸一撸Spring Cloud Ribbon的原理-负载均衡器

    在上一篇<撸一撸Spring Cloud Ribbon的原理>中整理发现,RestTemplate内部调用负载均衡拦截器,拦截器内最终是调用了负载均衡器来选择服务实例. 接下来撸一撸负载均 ...

  6. MySQL数据库基础(三)(操作数据表中的记录)

    1.插入记录INSERT 命令:,expr:表达式 注意:如果给主键(自动编号的字段)赋值的话,可以赋值'NULL'或'DEFAULT',主键的值仍会遵守默认的规则:如果省略列名的话,所有的字段必须一 ...

  7. Java经典编程题50道之四十二

    809*??=800*??+9*??+1,其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数.求??代表的两位数,以及809*??后的结果. public class Example ...

  8. linux 命令:tr 的简单使用

    工作的需要,用到了tr命令,因为用到的次数不是很多,怕以后忘记了百度,就自己总结下.例子什么的,copy linux shell 脚本攻略这本书. tr:常用选项 -c 用字符串1中字符集的补集替换此 ...

  9. iptables转发备忘

    iptables -F sysctl net.ipv4.ip_forward=1 iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8766 - ...

  10. 1.8 range

    哈哈,前边忘了介绍这个知识点了,老是用人家,不介绍一下都不好意思了. range()函数是一个用来创建数字序列的函数. 问题来了,为什么要写函数? 封装代码啊,让使用者不需要关心具体业务逻辑是如何实现 ...