传送门

思路:

直接上主席树,对于每个询问\((l,r)\),我们在第\(r\)个版本的主席树中查询最晚出现的小于\(l\)最小的数就行了。

因为答案可能为\(a_i+1\),所以我们在离散化的时候考虑将\(a_i+1\)加进去。

一开始主席树部分没有思考清楚,还是对主席树的理解不够深入吧。。。其实就是一个维护前缀信息的数,后面的信息如果和前面有重复的,在这题中会直接将原来的覆盖掉。反正按照前缀树来思考就行啦~

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int N = 200005;
int n, m;
int a[N], b[N << 1];
int D;
void Hash() {
sort(b + 1, b + D + 1);
D = unique(b + 1, b + D + 1) - b - 1;
for(int i = 1; i <= n; i++) a[i] = lower_bound(b + 1, b + D + 1, a[i]) - b;
}
int rt[N * 22], ls[N * 22], rs[N * 22], minv[N * 22], tot;
void build(int &o, int l, int r) {
o = ++tot; minv[o] = 0;
if(l == r) return;
int mid = (l + r) >> 1;
build(ls[o], l, mid); build(rs[o], mid + 1, r);
}
void insert(int &o, int last, int l, int r, int p, int v) {
o = ++tot;
ls[o] = ls[last]; rs[o] = rs[last];
if(l == r) {
minv[o] = v; return;
}
int mid = (l + r) >> 1;
if(p <= mid) insert(ls[o], ls[last], l, mid, p, v);
else insert(rs[o], rs[last], mid + 1, r, p, v);
minv[o] = min(minv[ls[o]], minv[rs[o]]);
}
int query(int o, int l, int r, int lim) {
if(l == r) return l;
int mid = (l + r) >> 1;
if(minv[ls[o]] <= lim) return query(ls[o], l, mid, lim);
return query(rs[o], mid + 1, r, lim);
}
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> a[i], b[++D] = a[i], b[++D] = a[i] + 1;
b[++D] = 0;
Hash();
build(rt[0], 1, D);
for(int i = 1; i <= n; i++) insert(rt[i], rt[i - 1], 1, D, a[i], i);
while(m--) {
int l, r; cin >> l >> r;
cout << b[query(rt[r], 1, D, l - 1)] << '\n';
}
return 0;
}

最新文章

  1. redux-amrc:用更少的代码发起异步 action
  2. Android开发学习---使用XmlPullParser解析xml文件
  3. springMVC文件上传(转)
  4. Linux I/O总结
  5. VS2008/MVC2 项目迁移到 VS2013/MVC4
  6. AJAX技术的核心
  7. Altium Designer如何批量修改名称,数值,封装
  8. (转)Java通过axis调用WebService
  9. OC中的类别Category-协议Protocol-…
  10. Mysql5.7数据导出提示--secure-file-priv选项问题的解决方法
  11. Spring Boot 指定某个依赖的版本
  12. 回溯法 Generate Parentheses,第二次总结
  13. 我的数据,我做主——RecoveryManager Plus
  14. meta标签使用方法总结
  15. MySQL Transaction--RR事务隔离级别下加锁测试
  16. Laravel + Vue 之 OPTIONS 请求的处理
  17. 使用FFMpeg命令行录屏推rtmp流
  18. 如何创建一个新的vue项目
  19. angularJS----filter
  20. MPAndroidChart Wiki(译文)~Part 4

热门文章

  1. [NOIP2015]联合权值
  2. AtCoder Grand Contest 037题解
  3. Linux性能优化实战学习笔记:第三十九讲
  4. [LeetCode] 674. Longest Continuous Increasing Subsequence 最长连续递增序列
  5. C语言实现贪吃蛇游戏
  6. 一次失败的尝试:arm(aarch64架构)上使用docker运行Gogs
  7. wifidog 用户第一次访问网络流程图
  8. java ++和--
  9. SpringBoot使用token简单鉴权
  10. vue+element 给表格添加数据,页面不实时刷新的问题