博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 3585: mex [主席树]
阅读量:7072 次
发布时间:2019-06-28

本文共 1462 字,大约阅读时间需要 4 分钟。

3585: mex

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 787  Solved: 422
[][][]

Description

  有一个长度为n的数组{a1,a2,...,an}。m次询问,每次询问一个区间内最小没有出现过的自然数。

Input

  第一行n,m。

  第二行为n个数。
  从第三行开始,每行一个询问l,r。

Output

  一行一个数,表示每个询问的答案。

Sample Input

5 5
2 1 0 2 1
3 3
2 3
2 4
1 2
3 5

Sample Output

1
2
3
0
3

HINT

数据规模和约定

  对于100%的数据:
  1<=n,m<=200000
  0<=ai<=109
  1<=l<=r<=n

  对于30%的数据:

  1<=n,m<=1000 

Source


 

参考:http://blog.csdn.net/werkeytom_ftd/article/details/50975467

感觉是非常神的做法

建立权值线段树,每个位置i保存数字i出现的最右端

查询[l,r],就是找第r棵前缀线段树中第一个值<l的

维护区间最小值就可以做到了

 

////  main.cpp//  bzoj3585////  Created by Candy on 2017/1/28.//  Copyright © 2017年 Candy. All rights reserved.//#include 
#include
#include
#include
using namespace std;#define lc(x) t[x].l#define rc(x) t[x].rconst int N=2e5+5,MX=1e8+5;inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){
if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}int n,Q,a[N],l,r;struct node{ int l,r,mn;}t[N*30];int sz,root[N];void ins(int &x,int l,int r,int p,int v){
//right of p is v t[++sz]=t[x];x=sz; if(l==r) t[x].mn=v; else{ int mid=(l+r)>>1; if(p<=mid) ins(t[x].l,l,mid,p,v); else ins(t[x].r,mid+1,r,p,v); t[x].mn=min(t[lc(x)].mn,t[rc(x)].mn); }}int query(int x,int l,int r,int v){ if(l==r) return l; else{ int mid=(l+r)>>1; if(t[lc(x)].mn

 

你可能感兴趣的文章
【转载】CentOS下查看电脑硬件设备属性命令
查看>>
鼠标悬停事件-----提示信息
查看>>
Learning English
查看>>
微博传播数量和传播深度的预测--基于pyspark和某个回归算法
查看>>
cp命令覆盖文件时不用按Y来确认的方法
查看>>
Tomcat优化
查看>>
【开源专访】Sea.js创始人玉伯的前端开发之路
查看>>
前台实现下载xml功能
查看>>
运营商 WLAN
查看>>
并发编程 —— ScheduledThreadPoolExecutor
查看>>
Octopus系列之各个页面调用示例
查看>>
zabbix 监控域名证书到期时间!!!!
查看>>
Java Magic. Part 1: java.net.URL
查看>>
异步实现服务器推送消息(聊天功能示例)
查看>>
Python中一个经典的参数错误
查看>>
AutoResetEvent详解
查看>>
Lumen框架—升级改造之路-开篇
查看>>
vs2013 sn key
查看>>
轻松记账工程冲刺第四天
查看>>
pig安装
查看>>