经典颜色问题推荐博文

https://www.cnblogs.com/tyner/p/11519506.html

https://www.cnblogs.com/tyner/p/11616770.html

https://www.cnblogs.com/tyner/p/11620894.html

题意

求一段区间中的元素种类, 同一个元素可能有多个,但是只记

一次, 多组询问

长度 <= 1000000, 询问次数 <= 200000

记得写快读

分析

重复颜色, 套路题

处理nxt, 枚举左端点,考虑''移动左端点''这一操作对区间答案的影响

具体做法来自: 150137

没有修改,我们不妨离线

我们将询问按照左端点排序, 然后维护一个当前的左指针和询问的左指针, 再维护一个 next 数组表示该物品的下一个相同元素物品的位置

维护一个 ans 数组, 每次当 l < ql 的时候, 更新 nextl, 然后 l 前

移继续即可,询问就是求前缀和啦

#include<cstdio>
#include<algorithm>
using namespace std;
#define lowbit(x) (x&-x)
inline int read() {
char ch = getchar(); int f = 1, x = 0;
while(ch<'0' || ch>'9') {if(ch == '-') f = -1; ch = getchar();}
while(ch>='0' && ch<='9') {x = x*10+ch-'0'; ch = getchar();}
return x*f;
}
const int MAX = 1000000+99; int n, m, max_;
int arr[MAX], nxt[MAX], lst[MAX];
int t[MAX];
struct node{
int l, r;
int ans, id;
}cmd[MAX];
bool cmp1(node a, node bb) {
return a.l < bb.l;
}
bool cmp2(node a, node bb) {
return a.id < bb.id;
} void add(int x, int k) {
while(x <= n) {t[x] += k; x += lowbit(x);}
}
int query(int x) {
int res = 0;
while(x) {res += t[x]; x -= lowbit(x);}
return res;
} void pre() {
n = read();
for(int i = 1; i <= n; i++) arr[i] = read(), max_ = max(max_, arr[i]);
for(int i = n; i >= 1; i--) {//颜色问题--处理nxt[]
nxt[i] = lst[arr[i]];
lst[arr[i]] = i;
}
// for(int i = 1; i <= n; i++) printf("%d %d\n", nxt[i], lst[i]);
for(int i = 1; i <= max_; i++) if(lst[i]) add(lst[i], 1);//初始化l==1的状态(注意判颜色是否存在
// 注意lst的下标是颜色,保存的是每个颜色第一次出现的位置坐标,所以是<=max_
m = read();
for(int i = 1; i <= m; i++) cmd[i].id = i,cmd[i].l = read(), cmd[i].r = read();
sort(cmd+1, cmd+1+m, cmp1);//按 l 从小到大排序
} void solve() {
int pos = 1;
for(int l = 1; l <= n; l++) {//枚举左端点
while(l == cmd[pos].l) {
cmd[pos].ans = query(cmd[pos].r);
++pos;
}
add(l, -1);
if(nxt[l]) add(nxt[l], 1);
} sort(cmd+1, cmd+1+m, cmp2);
for(int i = 1; i <= m; i++) printf("%d\n", cmd[i].ans);
} int main() {
pre();
solve();
return 0;
}

luoguP1972 [SDOI2009]HH的项链的更多相关文章

  1. 【离线做法 树状数组】luoguP1972 [SDOI2009]HH的项链

    与bzoj3585: mex的线段树做法有着异曲同工之妙 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  2. [luoguP1972] [SDOI2009]HH的项链(莫队 || 树状数组 || 主席树)

    传送门 莫队基础题,适合我这种初学者. 莫队是离线算法,通常不带修改,时间复杂度为 O(n√n) 我们要先保证通过 [ l , r ] 求得 [ l , r + 1 ] , [ l , r - 1 ] ...

  3. BZOJ 1878: [SDOI2009]HH的项链

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3548  Solved: 1757[Submit][Statu ...

  4. 【BZOJ1878】[SDOI2009]HH的项链 离线BIT

    1878: [SDOI2009]HH的项链 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义 ...

  5. BZOJ 1878: [SDOI2009]HH的项链 离线树状数组

    1878: [SDOI2009]HH的项链 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  6. Bzoj 1878: [SDOI2009]HH的项链 莫队

    1878: [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2717  Solved: 1363[Submit][Statu ...

  7. BZOJ 1878: [SDOI2009]HH的项链( BIT )

    离线处理 , 记下询问的左右端点并排序 , 然后可以利用树状数组 , 保证查询区间时每种颜色只计算一次 ------------------------------------------------ ...

  8. 洛谷 P1972 [SDOI2009]HH的项链【莫队算法学习】

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  9. BZOJ_1878_[SDOI2009]HH的项链_莫队

    BZOJ_1878_[SDOI2009]HH的项链_莫队 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考 ...

随机推荐

  1. 01-Node.js学习笔记-模块成员的导出导入

    什么是Node.js Node.js是一个让javascript运行在服务端的开发平台: Node.js能做什么? 1.基于社交网络的大规模web应用: 2.命令行工具 3.交互式终端程序 4.带有图 ...

  2. canvas详解----绘制线条

    <!DOCTYPE html> <html> <head> <title>canvas详解</title> </head> &l ...

  3. charles使用(安装、mock、限速、断点功能)

    我们在进行B/S架构的Web项目开发时,在前端页面与后台交互的调试的时候,通常使用在JSP中加入“debugger;”断点,然后使用浏览器的F12开发者工具来查看可能出错的地方的数据.或者使用Http ...

  4. acwing 651. 逛画展

    地址 https://www.acwing.com/problem/content/653/ 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy想到博览馆去看这几位大师的作品. 可是,那 ...

  5. Node.js使用Nodemailer发送邮件

    除了Python,在node中收发电子邮件也非常简单,因为强大的社区有各种各样的包可以供我么直接使用.Nodemailer包就可以帮助我们快速实现发送邮件的功能. Nodemailer简介 Nodem ...

  6. WPF 精修篇 自定义控件

    原文:WPF 精修篇 自定义控件 自定义控件 因为没有办法对界面可视化编辑 所以用来很少 现在实现的是 自定义控件的 自定义属性 和自定义方法 用VS 创建自定义控件后 会自动创建 Themes 文件 ...

  7. WPF 精修篇 page

    原文:WPF 精修篇 page 前言 前段时间看UML 大象 这本书 虽然马上看到了精华片 最后还是暂时暂停 因为这本书 很好 但是暂时对现在的我来说 有点超前 很多东西理解起来还是很难 但是 这本书 ...

  8. CSP-S 2019文澜中学游记(11.15~11.17)

    前言 今年的\(CSP-S\),本以为自己的实力与去年的\(NOIP\)相比,能有较大的提升的. 没想到,菜是原罪,弱就是弱,依然逃脱不了被吊锤的命运. \(Nov\ 15th\):\(Day\ 0\ ...

  9. Redis 内存淘汰机制

    Redis内存淘汰指的是用户存储的一些键被可以被Redis主动地从实例中删除,从而产生读miss的情况,那么Redis为什么要有这种功能?这就是我们需要探究的设计初衷.Redis最常见的两种应用场景为 ...

  10. 程序员,你还不会合理选择Filter、Interceptor、Aspect?

    小伙伴们应该听说过过滤器.拦截器.切面,印象上都能够起到截断拦截的作用,在做一些业务需求时,不知道如何选择,今天老顾就来介绍一下他们之间的区别. 过滤器可以拦截到方法的请求和响应 (ServletRe ...