Codeforces 940F Machine Learning (带修改莫队)
题目链接 Codeforces Round #466 (Div. 2) Problem F
题意 给定一列数和若干个询问,每一次询问要求集合$\left\{c_{0}, c_{1}, c_{2}, c_{3}, ...,c_{10^{9}}\right\}$的$mex$
同时伴有单点修改的操作。
根据题目询问的这个集合的性质可以知道答案不会超过$\sqrt{n}$,那么每次询问的时候直接暴力找就可以了。
剩下的都是可修改莫队的基本操作。
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) const int N = 1e5 + 10; int c[N], f[N << 1], vis[N], ans[N];
int a[N], b[N], d[N << 1];
int n, m, bs, et;
int cnt = 0, tot = 0;
int op, x, y;
int l, r;
int net, ret; struct node{
int l, r, lb, rb, id, x;
friend bool operator < (const node &a, const node &b){
if (a.lb != b.lb) return a.lb < b.lb;
if (a.rb != b.rb) return a.rb < b.rb;
return a.x < b.x;
}
} q[N]; struct upd{
int pos, x, y;
} e[N]; void update(int x){
if (vis[x]){
--c[f[a[x]]];
--f[a[x]];
++c[f[a[x]]];
} else{
--c[f[a[x]]];
++f[a[x]];
++c[f[a[x]]];
} vis[x] ^= 1;
} void change(int pos, int x){
if (vis[pos]){
update(pos);
a[pos] = x;
update(pos);
} else a[pos] = x;
} int main(){ scanf("%d%d", &n, &m);
bs = pow(n, 2. / 3.);
bs = max(bs, 1);
rep(i, 1, n) scanf("%d", a + i), d[++et] = a[i]; rep(i, 1, m){
scanf("%d%d%d", &op, &x, &y);
if (op == 1){
++cnt;
q[cnt].l = x;
q[cnt].r = y;
q[cnt].lb = (x - 1) / bs + 1;
q[cnt].rb = (y - 1) / bs + 1;
q[cnt].id = cnt;
q[cnt].x = tot;
} else{
++tot;
e[tot].pos = x;
e[tot].y = y;
d[++et] = y;
}
} sort(d + 1, d + et + 1);
net = unique(d + 1, d + et + 1) - d - 1;
rep(i, 1, n) a[i] = lower_bound(d + 1, d + net + 1, a[i]) - d;
rep(i, 1, tot) e[i].y = lower_bound(d + 1, d + net + 1, e[i].y) - d; rep(i, 1, n) b[i] = a[i]; rep(i, 1, tot){
e[i].x = b[e[i].pos];
b[e[i].pos] = e[i].y;
} sort(q + 1, q + cnt + 1); l = 1, r = 0, x = 0; rep(i, 1, cnt){
while (x < q[i].x){
++x;
change(e[x].pos, e[x].y);
} while (x > q[i].x){
change(e[x].pos, e[x].x);
--x;
} while (r < q[i].r) update(++r);
while (r > q[i].r) update(r--);
while (l > q[i].l) update(--l);
while (l < q[i].l) update(l++); rep(j, 1, 1e5) if (!c[j]){ ret = j; break;} ans[q[i].id] = ret;
} rep(i, 1, cnt) printf("%d\n", ans[i]);
return 0;
}
Codeforces 940F Machine Learning (带修改莫队)的更多相关文章
- Codeforces 940F Machine Learning 带修改莫队
题目链接 题意 给定一个长度为\(n\)的数组\(a\),\(q\)个操作,操作分两种: 对于区间\([l,r]\),询问\(Mex\{c_0,c_1,c_2,⋯,c_{10^9}\}\),其中\(c ...
- CF940F Machine Learning 带修改莫队
题意:支持两种操作:$1.$ 查询 $[l,r]$ 每个数字出现次数的 $mex$,$2.$ 单点修改某一位置的值. 这里复习一下带修改莫队. 普通的莫队中,以左端点所在块编号为第一关键字,右端点大小 ...
- BZOJ2120 数颜色(带修改莫队)
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- bzoj 2120 数颜色 带修改莫队
带修改莫队,每次查询前调整修改 #include<cstdio> #include<iostream> #include<cstring> #include< ...
- BZOJ2120&2453数颜色——线段树套平衡树(treap)+set/带修改莫队
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2 ...
- BZOJ.2453.维护队列([模板]带修改莫队)
题目链接 带修改莫队: 普通莫队的扩展,依旧从[l,r,t]怎么转移到[l+1,r,t],[l,r+1,t],[l,r,t+1]去考虑 对于当前所在的区间维护一个vis[l~r]=1,在修改值时根据是 ...
- [BZOJ4129]Haruna’s Breakfast(树上带修改莫队)
BZOJ3585,BZOJ2120,BZOJ3757三合一. 对于树上路径问题,树链剖分难以处理的时候,就用树上带修改莫队. 这里的MEX问题,使用BZOJ3585的分块方法,平衡了时间复杂度. 剩下 ...
- BZOJ.3052.[WC2013]糖果公园(树上莫队 带修改莫队)
题目链接 BZOJ 当然哪都能交(都比在BZOJ交好),比如UOJ #58 //67376kb 27280ms //树上莫队+带修改莫队 模板题 #include <cmath> #inc ...
- BZOJ2120数颜色(带修改莫队)
莫队算法是一种数据结构的根号复杂度替代品,主要应用在询问[l,r]到询问[l+1,r]和[l,r+1]这两个插入和删除操作复杂度都较低的情况下.具体思想是:如果把一个询问[l,r]看做平面上的点(l, ...
- 【BZOJ】4129: Haruna’s Breakfast 树分块+带修改莫队算法
[题意]给定n个节点的树,每个节点有一个数字ai,m次操作:修改一个节点的数字,或询问一条树链的数字集合的mex值.n,m<=5*10^4,0<=ai<=10^9. [算法]树分块+ ...
随机推荐
- Category的真相
Objective-C 中的 Category 就是对设计模式中装饰模式的一种具体实现.它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法. 使用场景 根据苹果官方文档对 Categor ...
- 跟着学!教你开发第一个Java程序
今天我们的目标是开发人生中的第一个Java程序,虽然可能会很简单,但是这小小的一步却是跨入IT行业的一大步!下面我们来一起来仔细的了解开发的流程. 准备工作 1,作为一名准程序猿自备一台电脑那是必不可 ...
- iphone 8 plus 红色特别版,突然自动关机无法启动
今天早上我的iphone 8p 突然自己在床上闪动开机图标,闪了半个多小时它就光荣的自动关机了,我尝试了长按开机键,长按home+开机键15秒,通通木有用,它就是没!反!应! 于是找了售后,学到了正确 ...
- 【转载】Linux下安装LoadRunner LoadGenerator
原文地址:[转载]Linux下安装LoadRunner LoadGenerator作者:邱建忠tester LR的负载机安装在linux的理由: 1.windows xp,双核+4G内存,基本上每个v ...
- 【转载】Unity3d UnityEditor编辑器定制和开发插件
在阅读本教程之前,你需要对Unity的操作流程有一些基础的认识,并且最好了解内置的GUI系统如何使用. 如何让编辑器运行你的代码 Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编 ...
- python_ 运算符与分支结构
# 运算符与分支结构 ### 运算符 - 赋值运算符 - 用'='表示,左边只能是变量. - 算术运算符 - +.-.*:加.减.乘 - /:除法运算,结果是浮点数 - //:除法运算,结果是整数 - ...
- php 代码段执行时间
<?php //程序运行时间 $starttime = explode(' ',microtime()); echo microtime(); /*········以下是代码区······· ...
- .net的CLR
搜索:CLR结构图 C#所具有的许多特点都是由CLR提供的,如类型安全(Type Checker).垃圾回收(Garbage Collector).异常处理(Exception Manager).向下 ...
- JDK从1.8升级到9.0.1后sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用
目录 描述 原因分析 处理办法 参考 描述 最近研究把项目的JDK升级从1.8升级到9.0.1,在eclipse上配置好JDK为9后,发现项目有错,查看发现sun.misc.BASE64Decoder ...
- Oracle在登陆时被告知用户被锁,如何解决?
在登陆时被告知test用户被锁 1.用dba角色的用户登陆,进行解锁,先设置具体时间格式,以便查看具体时间 SQL> alter session set nls_date_format=’yyy ...