array

给一个全排列,接下来有两种操作:

一、把pospospos位置上的值+10,000,000+10,000,000+10,000,000。

二、查询[1,r][1, r][1,r]区间,没有出现的且≥k\geq k≥k的最小值是多少。

考虑用主席树 + set 求解,

先建立一颗主席树,每个叶节点的权值为其所代表的区间(一个点)的值,然后维护区间最小值即可。

然后权值插入,每次把这个点的权值跟新为infinfinf,这一步也可以理解为,在这个区间出现的数就是infinfinf了,所以我们只要查询最小值即可求得这个区间没有出现得数。

思考一下,我们的答案只可能≤n+1\leq n + 1≤n+1,所以对于操作一,我们把修改得权值加入setsetset,对于操作二,我们在对应主席树上查找区间最小值即可,然后与在setsetset查找得最优答案取minminmin即可。

#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10, inf = 0x3f3f3f3f;int a[N], n, m;int ls[N << 5], rs[N << 5], minn[N << 5], root[N], cnt;void push_up(int rt) {minn[rt] = min(minn[ls[rt]], minn[rs[rt]]);
}void build(int &rt, int l, int r) {rt = ++cnt;if (l == r) {minn[rt] = l;return ;}int mid = (l + r) >> 1;build(ls[rt], l, mid);build(rs[rt], mid + 1, r);push_up(rt);
}void update(int &rt, int pre, int l, int r, int x, int v) {rt = ++cnt, ls[rt] = ls[pre], rs[rt] = rs[pre], minn[rt] = minn[pre];if (l == r) {minn[rt] = v;return ;}int mid = (l + r) >> 1;if (x <= mid) {update(ls[rt], ls[pre], l, mid, x, v);}else {update(rs[rt], rs[pre], mid + 1, r, x, v);}push_up(rt);
}int query(int rt, int l, int r, int L, int R) {if (l >= L && r <= R) {return minn[rt];}int mid = (l + r) >> 1, ans = 0x3f3f3f3f;if (L <= mid) {ans = min(ans, query(ls[rt], l, mid, L, R));}if (R > mid) {ans = min(ans, query(rs[rt], mid + 1, r, L, R));}return ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int T;scanf("%d", &T);while (T--) {scanf("%d %d", &n, &m);const int N = n + 1;cnt = 0;build(root[0], 1, N);for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);update(root[i], root[i - 1], 1, N, a[i], inf);}int last = 0, op, t1, t2;set<int> st;for (int i = 1; i <= m; i++) {scanf("%d %d", &op, &t1);if (op == 1) {t1 ^= last;st.insert(a[t1]);}else {scanf("%d", &t2);t1 ^= last, t2 ^= last;last = inf;last = query(root[t1], 1, N, t2, N);auto it = st.lower_bound(t2);if (it != st.end()) {last = min(last, *it);}printf("%d\n", last);}}}return 0;
}

HDU 6703 array(主席树 + set)相关推荐

  1. hdu 2665(主席树查询区间k大值)

    先贴我自己写的代码做模板虽然跟原博主没什么两样.(一开始空间开的4*maxn,交到hdu上一直TLE很奇怪) #include<bits/stdc++.h> using namespace ...

  2. HDU - 5820 Lights(主席树)

    题目链接:点击查看 题目大意:给出一个 n * m 的矩阵,再给出 N 个点,问其中的任意两个点 ( x1 , y1 ) 与 ( x2 , y2 ) 之间,最短路径为 abs( x1 - x2 ) + ...

  3. HDU - 5790 Prefix(主席树+字典树)

    题目链接:点击查看 题目大意:给出 n 个字符串,再给出 m 次询问,每次询问需要输出区间 [ l , r ] 内的所有字符串有多少个不同的前缀,要求算法强制在线 题目分析:统计字符串的前缀,不难想到 ...

  4. HDU - 4866 Shooting(主席树+扫描线)

    题目链接:点击查看 题目大意:给出 n 条平行于 x 轴的线段,每条线段都的 [ l , r ] 都位于 [ 1 , X ] 之间,每条线段的高度为 d,也就是距离 x 轴的位置,接下来给出 m 次询 ...

  5. Just $h$-index HDU - 6278(主席树找区间大于等于k的个数)

    The hh-index of an author is the largest hh where he has at least hh papers with citations not less ...

  6. Super Mario HDU - 4417(主席树解决区间数字小于k的个数||线段树+离线)

    Mario is world-famous plumber. His "burly" figure and amazing jumping ability reminded in ...

  7. Sequence II HDU - 5919(主席树)

    Mr. Frog has an integer sequence of length n, which can be denoted as a1,a2,⋯,ana1,a2,⋯,an There are ...

  8. hdu 4605 Magic Ball Game (在线主席树/离线树状数组)

    版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4605 题意: 有一颗树,根节点为1,每一个节点要么有两个子节点,要么没有,每个节点都有一个权值wi .然后,有一个球,附带值x . 球 ...

  9. hdu 4348 To the moon (主席树)

    版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4348 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q ...

最新文章

  1. 屏蔽Drupal中的“Notice: Undefined index”警告
  2. 重学 html の meta 标签
  3. SSRS:服务器更名后,ReportingService无法使用和登录的解决办法
  4. 二进制安装部署 4 kubernetes集群---超详细教程
  5. error while loading shared libraries: xxx.so.x 错误的原因和解决办法
  6. 光纤交换机按照级别可分为3种
  7. Android 基础总结
  8. 昆明钟英高中2021年高考成绩查询,昆明官渡钟英中学2021年排名
  9. 虚幻引擎5安装踩坑记录
  10. IT行业含金量较高的证书汇总
  11. MySQL数据库 CPU飙升到100%
  12. 常用电子邮箱格式怎么写?哪个邮箱最安全最好用?
  13. 2022年全球及中国FIP-EMI垫片行业销售前景与运行规模研究报告
  14. 【Robo3T】为mongodb数据库中的表创建索引的步骤
  15. 软件授权License的区别
  16. 3-基于51单片机的篮球计分器
  17. nc: command not found完美解决(linux配置nc命令)
  18. java中的Dao类,model类是什么意思
  19. 基于SSM实现家政管理平台的开发和实现
  20. java数组length是下标_数组的下标与长度

热门文章

  1. 尾调用优化 java_为什么JVM仍然不支持尾调用优化?
  2. 王道408数据结构——第三章 栈和队列
  3. 如何在html里加入验证码_如何把crc校验加入到对应的程序里?看高手怎么做
  4. 拿了年终奖后,发现自己又拖后腿了?对不起,可能事实并没有那么糟糕...
  5. 霍金竟然亲口承认自己是个赌徒!明明失败了不止一次,“菜鸡”却成了神话!...
  6. 5分钟盗走你的隐私照片,这个全球性漏洞到底有多可怕
  7. 每日一笑 | 今天是植树节,我想在你心里种点逼树
  8. 从头到尾彻底理解傅里叶变换算法(下)
  9. java跨平台的特性_【简答题】什么是跨平台特性?Java怎样实现跨平台特性?
  10. filesystemwatch java_C#方法的委托和java中的回调