题目: 链接:https://codeforces.com/problemset/problem/940/F

题意:给你n个数,a[i]有q个操作,操作有两种:操作1.       1 x y 表示询问, mex{ c[ 1 ],c[ x + 1 ],...c[ 1e9 ] } 的值, 其中 c[i] 表示 a[ i ] 在 区间 [ x , y ] 出现的次数, (mex{   }  的意思呢,是从1开始数,第一个不出现在集合 {   }  里的数, 比如  mex{  1, 2,  4  } = = 3     因为此题是从1开始数 )       操作2.      2  p  x  将 a[ p ]  重新赋值 为 x                  对每个操作1 输出答案

思路: 将  a[ i ]  离散化  因为 数据有点大,然后找答案 直接 暴力 找   其他的基本上就是 带修莫队 的 模板了

#include<bits/stdc++.h>
#define LL long long
#define ULL unsigned long long
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define dep(i,j,k) for(int i=k;i>=j;i--)
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,0,sizeof(i))
#define make(i,j) make_pair(i,j)
using namespace std;
const int N=2e5+;
int a[N],pos[N],num[N],cnt[N],now[N],p,ans[N],l=,r=; /// num就是a[i]在l,r出现的次数,然后cnt就是那个 mex { } 的集合
struct noq {
int l,r,id,t;
}q[N];
struct noc {
int x,old,ne;
}c[N];
map<int,int>vis; ///离散化 a[i] 需要
bool cmp(noq a,noq b) {
if(pos[a.l]==pos[b.l]) {
if(pos[a.r]==pos[b.r]) return a.t<b.t;
return pos[a.r]<pos[b.r];
}
return pos[a.l]<pos[b.l];
}
int get(int x) { /// 得到 离散化后的a[i]
if(vis[x]==) vis[x]=++p;
return vis[x];
}
void add(int x,int d) {
cnt[num[x]]--;
num[x]+=d;
cnt[num[x]]++;
}
void go(int x,int ne) {
if(l<=x && x<=r) {
add(a[x],-); add(ne,);
}
a[x]=ne;
}
int cal() {///找答案
for(int i=;;i++) if(cnt[i]==) return i;
}
int main() {
int n,m; int head=,tail=;
scanf("%d %d",&n,&m); int M=(int)pow(n,0.666666);
rep(i,,n) {
scanf("%d",&a[i]);
now[i]=a[i]=get(a[i]);
pos[i]=(i-)/M;
}
rep(i,,m) {
int ch; int x,y;
scanf("%d %d %d",&ch,&x,&y);
if(ch==) q[++head]=(noq){x,y,head,tail};
else {
y=get(y); ///记得y也要离散化,因为 now[x] 是 离散化后的 a[i]
c[++tail]=(noc){x,now[x],y};
now[x]=y;
}
}
sort(q+,q++head,cmp); int t=;
rep(i,,head) {
while(t<q[i].t) go(c[t+].x,c[t+].ne),++t;
while(t>q[i].t) go(c[t].x,c[t].old),--t;
while(l<q[i].l) add(a[l++],-);
while(l>q[i].l) add(a[--l],);
while(r<q[i].r) add(a[++r],);
while(r>q[i].r) add(a[r--],-);
ans[q[i].id]=cal();
}
rep(i,,head) printf("%d\n",ans[i]);
return ;
}

CF 940F - Machine Learning ( 带 修 )的更多相关文章

  1. F. Machine Learning 带修端点莫队

    F. Machine Learning time limit per test 4 seconds memory limit per test 512 megabytes input standard ...

  2. Codeforces 940F Machine Learning 带修改莫队

    题目链接 题意 给定一个长度为\(n\)的数组\(a\),\(q\)个操作,操作分两种: 对于区间\([l,r]\),询问\(Mex\{c_0,c_1,c_2,⋯,c_{10^9}\}\),其中\(c ...

  3. Codeforces 940F Machine Learning (带修改莫队)

    题目链接  Codeforces Round #466 (Div. 2) Problem F 题意  给定一列数和若干个询问,每一次询问要求集合$\left\{c_{0}, c_{1}, c_{2}, ...

  4. CF940F Machine Learning 带修改莫队

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

  5. CF940F Machine Learning(带修莫队)

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

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

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

  7. 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】

    转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...

  8. 机器学习(Machine Learning)与深度学习(Deep Learning)资料汇总

    <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...

  9. 机器学习(Machine Learning)&深度学习(Deep Learning)资料汇总 (上)

    转载:http://dataunion.org/8463.html?utm_source=tuicool&utm_medium=referral <Brief History of Ma ...

随机推荐

  1. 16-MySQL DBA笔记-调优基础理论和工具

    第五部分 性能调优与架构篇 本篇将为读者介绍性能调优的一些背景知识和理论,然后介绍一些工具的运用,最后介绍从应用程序到操作系统.到数据库.到存储各个环节的优化. 性能调优是一个高度专业的领域,它需要一 ...

  2. 自动化测试之if __name__ == '__main__'未运行

    自动化测试之if __name__ == '__main__'未运行 添加Count类 calculator.py: class Count: def __init__(self,a,b): self ...

  3. (一)easyUI之树形网络

    树形网格(TreeGrid)可以展示有限空间上带有多列和复杂数据电子表 一.案例一:按tree的数据结构来生成 前台 <%@ page language="java" con ...

  4. java 框架-缓冲-Redis 2Jedis操作

    https://www.cnblogs.com/wlandwl/p/redis.html Redis介绍及Jedis基础操作   1.Redis简介 Redis 是一个开源(BSD许可)的,内存中的数 ...

  5. DRF框架中链表数据通过ModelSerializer深度查询方法汇总

    DRF框架中链表数据通过ModelSerializer深度查询方法汇总 一.准备测试和理解准备 创建类 class Test1(models.Model): id = models.IntegerFi ...

  6. ztree在onCheck()方法中防止因触发联动关系导致页面多次渲染而卡死的问题

    这几天在项目中遇到了要使用树形选择框, 而且要求比较复杂,具体叙述如下: 首先是有个选择框,左边选择是适用的商品,右边显示已经选择的商品.也就是说,左边每次勾选操作,都要触发一个事件去刷新右边的页面, ...

  7. CAS客户端认证流程

    CAS登陆流程 Step 1:浏览器向CAS客户端发起登陆请求,CAS客户端生成“登陆URL”,并把浏览器重定向到该URL 登陆URL: https://${cas-server-host}:${ca ...

  8. ubuntu打开终端

    虚拟终端 Ctrl+Alt+T组合键 实际终端 Ctrl+Alt+F1 ~ F6组合键 可以在登录界面直接切换 退出终端 Ctrl+Alt+F7组合键

  9. 为什么说Java程序员必须掌握 Spring Boot ?

    Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,那么, Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot ...

  10. wsl2 debian安装docker

    应用商店下载debian 安装docker 安装依赖 打开安装好的docker安装依赖 sudo apt-get install apt-transport-https ca-certificates ...