传送门
给定一个长度为NNN的数组,求区间 l∼rl \sim rl∼r 不同的数字

分析

对于此类后面出现会影响(覆盖)前面出现效果的问题
需要往当前位置左边最后一次出现位置思考
比如,mexmexmex 也是如此
这道题求 区间mex 也是同样处理

这种位置会覆盖前一个位置影响的,都考虑左边最近一个的位置
静态区间在线查询 MEXMEXMEX
主席树,维护最近值域出现的位置
在 rrr 树上二分找值域的出现位置小于 lll 的最小值
证明:
假如一个数xxx 在区间 l∼rl \sim rl∼r 出现过,那么它在rrr数上对应值域的值,一定是大于等于lll的
推得,一个数在l∼rl \sim rl∼r区间出现过的条件是,在rrr树上值域的值一定大于lll
反之,则不出现。mexmexmex则是不出现的最小数,对应在树上就是值域最小且出现时间小于lll

所以,此题有主席树解法

主席树

主席树第rrr个版本的信息是,1∼r1 \sim r1∼r区间内,所有出现的数,最后一次出现的位置
假如,这里建立一个权值线段树,要在权值线段树上找到所有在 l∼rl \sim rl∼r 区间的个数(由于是第rrr棵树,所以不存在大于rrr的位置,找大于等于lll的即可),查询复杂度为 nlognnlognnlogn,因为要遍历到每一个叶子节点进行判断,但是我们这里不需要管权值的大小,只需要知道在大于 lll 的个数,因此我们可以在此基础上,忽略权值大小,直接对位置进行维护,因为 一个下标唯一确定一个权值,所以更新的时候对上一次出现的下标位置进行删除−1-1−1,更新当前位置+1+1+1,查询的时候直接查区间l∼rl \sim rl∼r的和即可

莫队

莫队写法就比较正常了
由于是不带修改的,分块正常分配为N\sqrt{N}N​即可,对不同块的lll进行从小到大排序,同一块的根据rrr从小到大奇偶排序
假如说区间中,增加一个数的时候,发现是第一次出现,计数器+1+1+1
删除一个数的时候,发现目前只有一个了,删了就没了,计数器−1-1−1
答案易知

代码

主席树

//SP3267
/*@Author: YooQ
*/
#include <bits/stdc++.h>
using namespace std;
#define sc scanf
#define pr printf
#define ll long long
#define FILE_OUT freopen("out", "w", stdout);
#define FILE_IN freopen("in", "r", stdin);
#define debug(x) cout << #x << ": " << x << "\n";
#define AC 0
#define WA 1
#define INF 0x3f3f3f3f
const ll MAX_N = 1e6+5;
const ll MOD = 1e9+7;
int N, M, K;int arr[MAX_N];struct Tr {int k, l, r;
}tr[MAX_N<<1];
int indx = 0;
int root[MAX_N];int clone(int x) {tr[++indx] = tr[x];return indx;
}void push_up(int rt) {tr[rt].k = tr[tr[rt].l].k + tr[tr[rt].r].k;
}#define mid l + ((r-l)>>1)
void update(int& rt, int l, int r, int x, int k) {rt = clone(rt);if (l == r) {tr[rt].k += k;return;}if (x <= mid) update(tr[rt].l, l, mid, x, k);if (x  > mid) update(tr[rt].r, mid+1, r, x, k);push_up(rt);
}int query(int rt, int l, int r, int x, int y) {if (!rt) return 0;if (x <= l && r <= y) {return tr[rt].k;}if (y <= mid) return query(tr[rt].l, l, mid, x, y);if (x  > mid) return query(tr[rt].r, mid+1, r, x, y);return query(tr[rt].l, l, mid, x, y) + query(tr[rt].r, mid+1, r, x, y);
}int pre[MAX_N];void solve(){sc("%d", &N);for (int i = 1; i <= N; ++i) {sc("%d", &arr[i]);root[i] = root[i-1];if (pre[arr[i]]) {update(root[i], 1, N, pre[arr[i]], -1);}update(root[i], 1, N, i, 1);pre[arr[i]] = i;}sc("%d", &M);int l, r;for (int i = 1; i <= M; ++i) {sc("%d%d", &l, &r);pr("%d\n", query(root[r], 1, N, l, r));}
}signed main()
{#ifndef ONLINE_JUDGE//FILE_INFILE_OUT#endifint T = 1;//cin >> T;while (T--) solve();return AC;
}

莫队

较基础的简单莫队

pending...

SP3267 DQUERY - D-query【莫队】或【主席树】相关推荐

  1. HDU - 3804 Query on a tree(主席树维护最大值+离散化)

    题目链接:点击查看 题目大意:给出一棵树,每条边上都有一个权值,给出m个查询:a,b:问从点1到点a的唯一路径上,在边权小于等于b的边中选出边权最大的值输出,若没有符合条件的边则输出-1: 题目分析: ...

  2. 牛客练习赛85 数学家的迷题 (带修莫队/线段树)

    题意: 1:将a[id]a[id]a[id]的值改为xxx. 2:令t=a[l]×a[l+1]×...×a[r−1]×a[r]t=a[l]×a[l+1]×...×a[r−1]×a[r]t=a[l]×a ...

  3. [国家集训队]数颜色 / 维护队列 (带修莫队模板题)

    题意: 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. ...

  4. HDU - 6959 zoto 莫队 + 值域分块

    传送门 文章目录 题意: 思路: 题意: 给你nnn个数,每个数有个值,有mmm次询问,每次给定l,r,y1,y2l,r,y1,y2l,r,y1,y2代表查询[l,r][l,r][l,r]区间内在[y ...

  5. 【WC2013】糖果公园 树上莫队

    树上莫队,将树分块,以x,y为一二关键字,以时间为第三关键字.暴力修改. #include <iostream> #include <cstdio> #include < ...

  6. 【SPOJ - DQUERY】D-query(权值树状数组 或 主席树 或 莫队)

    题干: Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query is a pair (i, ...

  7. SPOJ - DQUERY D-query(莫队/线段树+离线/主席树)

    题目链接:点击查看 题目大意:给出一个由n个数组成的序列,再给出m次查询,每次查询区间[l,r]中有多少个不同的数 题目分析:莫队模板题,直接套板子就好了 有点意思的是函数返回值为布尔类型,然后没有r ...

  8. SPOJ DQUERY - D-query (莫队算法)

    Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query is a pair (i, j) ...

  9. P4113 [HEOI2012]采花 【树状数组 AC】【莫队/主席树 TLE】

    传送门 题意简述:给定一个长度为 n 的序列,有 m 次询问,每次询问一段区间,求区间中有多少个数出现次数超过 1 次 这道题真的有点恶心...在洛谷上属于莫队,但是莫队会T,数据居然有2e6.莫队的 ...

最新文章

  1. LDAP(轻量目录存取协议)
  2. 编译安装mariadb-10.0.10
  3. Matlab篇(一)Matlab操作技巧
  4. Oracle增加修改删除字段/主键
  5. 一轮项目冲刺——移山小分队(6)
  6. 给SAP Spartacus开源项目提交代码时的注意事项
  7. SAP Hybris install.bat工作原理分析
  8. 计算机鼠标介绍教学反思,《玩转鼠标》教学反思
  9. 2021-07-24 KDD China郑宇博士部分听会记录
  10. FastDFS之文件服务器集群部署详解
  11. HTML - html简介和开发环境搭建
  12. linux安装中文输入法sc,Ubuntu 设置中文输入法
  13. centos 6.5 找回root密码的方法
  14. Fiddler 抓包工具2 - 全网最全最细教程,没有之一
  15. Java并发编程基础(一篇入门)
  16. Python爬虫——爬取网站的图片
  17. 2021-06-16 srm平台电子化采购的优势
  18. chrome证书错误问题
  19. 本周AI热点回顾:政府数据将开放共享、生命游戏发明者逝世、百度Apollo对外发布“ACE 交通引擎”
  20. 接口文档编辑工具+接口文档编写

热门文章

  1. PPT排版套路,这些你都知道吗
  2. 保障企业的业务迁移正常执行,需要考虑哪些因素?
  3. VIC水文模型入门攻略(上) 将VIC跑起来
  4. 关于如何使用内存擦车的
  5. 点点百度收录批量查询软件【过安全验证】
  6. App store最新审核标准公布
  7. 从一件小事看人生哲理!
  8. n个数中奇数和,偶数和
  9. css 3D盒子动画
  10. 一个专注极简的导航主页