洛谷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的一些关于CRUD方法
配置内容 static{configuration = HBaseConfiguration.create(); //创建配置文件(也就是load工程包目录下的配置文件hbase-site.xml) ...
- LeetCode389Find the Difference找不同
给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 示例: 输入: s = "abcd&quo ...
- Kotlin 委托(2)变量委托是什么、自定义变量委托
1.委托是什么? 1.1 官网示例 在每个变量委托的实现的背后,Kotlin 编译器都会生成辅助对象并委托给它. 假设委托如下, class C { var prop: Type by MyDeleg ...
- 前端(jQuery)(9)-- jQuery菜单
1.垂直菜单布局 2.垂直菜单实现 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- Ajax 用法简介
使用Ajax实现页面的局部刷新 一.不依赖jquery时是这样的用法: var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(ev ...
- java.lang.NoSuchMethodError: org.apache.commons.io.FileUtils.copyInputStreamToFile(Ljava/io/InputStream;Ljava/io/File;)V
昨天用的好好的,今天就不行了 也懒得搞 具体原因就是引用的问题 找了个能用的pom 直接贴过去完事儿
- python基础--闭包and装饰器
闭包函数:函数内部定义的函数:引用了外部变量但非全局变量 装饰器:有了闭包的概念再去理解装饰器就会相对容易一些.python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加 ...
- centos部分网站无法访问问题的解决
CentOS 5内核对TCP的读缓冲区大小有缺省设置,缺省为:net.ipv4.tcp_rmem = 4096 87380 4194304 解决办法就是将最后一个数字改小一点,具体操作就是在文件/et ...
- 使用Data Lake Analytics + OSS分析CSV格式的TPC-H数据集
0. Data Lake Analytics(DLA)简介 关于Data Lake的概念,更多阅读可以参考:https://en.wikipedia.org/wiki/Data_lake 以及AWS和 ...
- java中的线程(2):如何正确停止线程之2种常见停止方式
1.常见停止方式 结束run函数,run中含退出标志位. 使用interrupt()方法中断线程 使用stop方法暴力终止(已经弃用) 2.结束run class TestThread extends ...