经典颜色问题推荐博文

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. TICK技术栈(四)Grafana安装及使用

    1.什么是Grafana? Grafana是一款采用go语言和Angular框架编写的开源的可视化工具,主要用于大规模指标数据的可视化展示,提供包括折线图,饼图,仪表盘等多种监控数据可视化UI,是网络 ...

  2. 利用Flask中的werkzeug.security模块加密

    1.这种加密方式的原理:加密时混入一段"随机"字符串(盐值)再进行哈希加密.即使 密码相同,如果盐值不同,那么哈希值也是不一样的.现在网站开发中主要是运 用这种加密方法. 2.这个 ...

  3. Day2 - Python基础2 列表、字符串、字典、集合、文件、字符编码

    本节内容 列表.元组操作 数字操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 ...

  4. Python Django,事务,transaction.atomic,事务保存点

    from django.shortcuts import renderfrom django.http import HttpResponsefrom django.views.generic imp ...

  5. windows下配置ngnix服务器经常出现503问题解决办法

    自己网站在windows server2008下安装的ngnix,然后配置php,网站访问流量并不大,但是经常出现503问题.经过查看ngnix服务器错误日志,发现: (10061: No conne ...

  6. NOIP2019游记

    道歉:本文章很快打完了,所以有脏话 第零天 早上睡到6点半九点半从学校出发 有种很忙碌的感觉 在车上异常无聊,和zsf用笔记本看了阿丽塔战斗天使,感觉蛮好看的 阿丽塔的形象很丰富 叙事由雾到开 推荐 ...

  7. git pull出错:cannot pull into a repository with state: merging_resolved"

    git pull 出错解放办法:1.尝试先提交现有代码到本地,再更新2.git reset —hard

  8. HTML连载45-浮动元素脱标、排序规则、贴靠现象

    一.浮动元素脱标 1.什么是浮动元素脱标 脱标:脱离标准流. 当某一个元素浮动之后,那么这个元素看上去就像被从标准流中删除了一样 2.浮动元素脱标之后有什么影响 如果前面一个元素浮动了,而后面的一个元 ...

  9. 【shell脚本】自动磁盘分区,格式化,挂载===autoMount.sh

    #!/bin/bash # 自动对磁盘分区.格式化.挂载 # 对虚拟机的 vdb 磁盘进行分区格式化,使用<<将需要的分区指令导入给程序 fdisk # n(新建分区),p(创建主分区), ...

  10. 基于python的selenium常用操作方法(2)

    9 多表单切换 在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位.这 ...