洛谷4137 mex题解 主席树
虽然可以用离线算法水过去,但如果强制在线不就gg了。
所以要用在线算法。
首先,所有大于n的数其实可以忽略,因为mex的值不可能大于n
我们来设想一下,假设已经求出了从0到n中所有数在原序列中小于r时最后出现的位置,用k[i]来表示
那么显然mex(l,r)就是小于l的最小的k[j]中最小的下标,显然可以维护一下最小值,用二分来求。
然后建一颗主席数,root[i]表示此时考虑到了i,每次询问l,r时访问root[r]然后求一下就行了
复杂度时O(nlogn);
# include<iostream>
# include<cstdio>
# include<algorithm>
# include<cmath>
const int mn=200010;
const int inf = 100000000;
inline int min(int x,int y)
{
return x>y ? y : x;
}
int c[mn],tree[mn*25],left[mn*25],right[mn*25],root[mn];
int j,k,t,n,m,tot,ans;
void add(int &x,int y,int l,int r,int a,int b){
x=++tot;
tree[x]=tree[y];
left[x]=left[y];
right[x]=right[y];
if (l==r){
tree[x]=b;
return;
}
int mid=(l+r)/2;
if (a<=mid)
add(left[x],left[y],l,mid,a,b);
else add(right[x],right[y],mid+1,r,a,b);
tree[x]=min(tree[left[x]],tree[right[x]]);
}
int query(int x,int l,int r,int a){
if (l==r) return l;
int mid=(l+r)/2;
if (tree[left[x]]>=a)
return query(right[x],mid+1,r,a);
else return query(left[x],l,mid,a);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&c[i]);
add(root[i],root[i-1],0,inf,c[i],i);
}
while (m--){
scanf("%d%d",&j,&k);
ans=query(root[k],0,inf,j);
printf("%d\n",ans);
}
return 0;
}
洛谷4137 mex题解 主席树的更多相关文章
- 洛谷P2617 Dynamic Rankings (主席树)
洛谷P2617 Dynamic Rankings 题目描述 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a ...
- 洛谷P3567 KUR-Couriers [POI2014] 主席树/莫队
正解:主席树/莫队 解题报告: 传送门! 这题好像就是个主席树板子题的样子,,,? 毕竟,主席树的最基本的功能就是,维护一段区间内某个数字的个数 但是毕竟是刚get到主席树,然后之前做的一直是第k大, ...
- 洛谷P3567[POI2014]KUR-Couriers(主席树+二分)
题意:给一个数列,每次询问一个区间内有没有一个数出现次数超过一半 题解: 最近比赛太多,都没时间切水题了,刚好日推了道主席树裸题,就写了一下 然后 WA80 WA80 WA0 WA90 WA80 ?? ...
- 洛谷$P3302$ 森林 $[SDOI2013]$ 主席树
正解:主席树 解题报告: 传送门! 口胡一时爽代码火葬场 这题想法不难,,,但显然的是代码应该还挺难打的 但反正我也不放代码,就写下题解趴$QwQ$ 第一问就是个$Count\ on\ a\ tree ...
- 洛谷P3567 [POI2014]KUR-Couriers 主席树
挺裸的,没啥可讲的. 不带修改的主席树裸题 Code: #include<cstdio> #include<algorithm> using namespace std; co ...
- 洛谷P4602 [CTSC2018]混合果汁(主席树)
题目描述 小 R 热衷于做黑暗料理,尤其是混合果汁. 商店里有 nn 种果汁,编号为 0,1,\cdots,n-10,1,⋯,n−1 . ii 号果汁的美味度是 d_idi ,每升价格为 p_ipi ...
- 洛谷P2617 Dynamic Rankings 主席树 单点修改 区间查询第 K 大
我们将线段树套在树状数组上,查询前预处理出所有要一起移动的节点编号,并在查询过程中一起将这些节点移到左右子树上. Code: #include<cstdio> #include<cs ...
- 洛谷p3384【模板】树链剖分题解
洛谷p3384 [模板]树链剖分错误记录 首先感谢\(lfd\)在课上调了出来\(Orz\) \(1\).以后少写全局变量 \(2\).线段树递归的时候最好把左右区间一起传 \(3\).写\(dfs\ ...
- 洛谷NOIp热身赛题解
洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...
随机推荐
- hbase Hfile处理原因
Hile 内部的数据是按key排序好的,但Hfile之间数据并不能保证key的排序,也就是说对于新生成的Hfile,其内部的key并不都比老的Hfile的大,因此每次检索时,都需要在所有的Hfile中 ...
- JosnRpcClient
<?php /** * Simple JSON-RPC interface. */ namespace org; class JosnRpcClient{ protected $host; pr ...
- odoo web controller
Routing openerp.http.route(route=None, **kw) Decorator marking the decorated method as being a handl ...
- 学习写Js的动画
说起前端,要说动画是最有乐子的东西了.玩好动画一定会很轻易的享受到前端的乐趣. 这里我不会讲述什么css3 的 transform animation keyframes,也不会讲述jquery的an ...
- 20190817-T1-LOJ6322「雅礼国庆 2017 Day6」Star Way To Heaven
写这篇题解是因为作者太蒻已经忘了最小生成树了. <题面> 这个题还真是想不到最小生成树. $80\%$算法 复杂度:$\Theta(k^2 \log N )$ 用了二分答案(明显答案具有单 ...
- jframe 设置左上角和任务栏的图标
默认就是 改成有意义的,一眼就能看出来功能的,比如一个小蜘蛛 第一个最简单的做法,把图片扔到工程的根目录,但是这样会相当乱,不便于文件管理 ImageIcon icon = new ImageIcon ...
- poi操作word,简单写docx
参考博客: https://www.cnblogs.com/guilty/p/3977016.html 在HWPF中换行符是"\013",在XWPF中是run.addBreak() ...
- birt运行环境
1.下载 http://pan.baidu.com/s/1nvhz5wt 2.解压birt-runtime-4.6.0-20160607.zip 将WebViewerExample更名为birt,复制 ...
- vmstat-虚拟内存查看实例
虚拟内存运行原理 在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间.当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存 ...
- Mysql 5.7.17安装后登录mysql的教程方法
在运行 ./bin/mysqld Cinitialize 初始化数据库时,会生成随机密码,示例: [Note] A temporary password is generated for root@l ...