[SDOI2009] HH的项链(待续)
[SDOI2009] HH的项链(待续)
题目大意:对一个由若干个数字(可重复)组成的数列,询问\([l,r]\)中出现的不同的数字数量
考试时(考试时范围小)用的暴力,but,没有考虑数字0的情况,炸掉。
Solution.1
- 读入,将询问按照右端点从小到大排序,左端点如何不考虑
- 因为按照\(r\)推进,我们只需要考虑新的数字,所以当一个数字比它之前出现的位置靠右,我们只记录这一个
- 用树状数组来维护
Code.1
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define lowbit(x) x & -x
using std::sort;
const int N = 1e6 + 10;
struct Q{
int l, r, num;
}a[N];
int bit[N], shell[N], last[N], A[N];
int n, m, nowr;
inline bool cmp(Q a, Q b){
return a.r < b.r;
}
inline int ask(int x){
int ans = 0;
for(; x; x -= lowbit(x)){
ans += bit[x];
}
return ans;
}
inline void ins(int x, int y){
for(; x <= n; x += lowbit(x)){
bit[x] += y;
}
}
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; ++i){
scanf("%d", &shell[i]);
}
scanf("%d", &m);
for(int i = 1; i <= m; ++i){
scanf("%d %d", &a[i].l, &a[i].r);
a[i].num = i;
}
sort(a + 1, a + m + 1, cmp);//排序
for(int i = 1; i <= m; ++i){
while(nowr < a[i].r){//核心代码,last表示此数字上一次出现的位置
nowr++;//shell表示此位置出现的数字
if(last[shell[nowr]])
ins(last[shell[nowr]], -1);
ins(nowr, 1);
last[shell[nowr]] = nowr;
}
A[a[i].num] = ask(a[i].r) - ask(a[i].l - 1);
}
for(int i = 1; i <= m; ++i){
printf("%d\n", A[i]);
}
return 0;
}
解法2:
用莫队;
莫队算法可用于解决一类可离线且在得到区间\([l,r]\)的答案后,能在\(O(1)\)或\(O(log2n)\)得到区间\([l,r+1]\)或\([l−1,r]\)的答案的问题
解法3:
主席树
[SDOI2009] HH的项链(待续)的更多相关文章
- BZOJ 1878: [SDOI2009]HH的项链
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3548 Solved: 1757[Submit][Statu ...
- 【BZOJ1878】[SDOI2009]HH的项链 离线BIT
1878: [SDOI2009]HH的项链 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义 ...
- BZOJ 1878: [SDOI2009]HH的项链 离线树状数组
1878: [SDOI2009]HH的项链 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- Bzoj 1878: [SDOI2009]HH的项链 莫队
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2717 Solved: 1363[Submit][Statu ...
- BZOJ 1878: [SDOI2009]HH的项链( BIT )
离线处理 , 记下询问的左右端点并排序 , 然后可以利用树状数组 , 保证查询区间时每种颜色只计算一次 ------------------------------------------------ ...
- 洛谷 P1972 [SDOI2009]HH的项链【莫队算法学习】
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
- BZOJ_1878_[SDOI2009]HH的项链_莫队
BZOJ_1878_[SDOI2009]HH的项链_莫队 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考 ...
- bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 之前用莫队做的,现在用树状数组 把每种数的第一个出现位置在树状数组中+1 nxt[i] 记录i ...
- 洛谷P1972 [SDOI2009]HH的项链 题解
[SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...
随机推荐
- Redis之哨兵机制(sentinel)——配置详解及原理介绍
说到Redis不得不提哨兵模式,那么究竟哨兵是什么意思?为什么要使用哨兵呢? 接下来一一为您讲解: 1.为什么要用到哨兵 哨兵(Sentinel)主要是为了解决在主从(master-slave)复制架 ...
- 自己yy的中缀表达式转后缀表达式(未验证完全正确)
目前自己测试的表达式都没有出过问题 思路是这样,先将后缀表达式的计算顺序搞出来..当完全缩出来一个数的时候,如果后面还有要计算的,我们就把它放到后缀表达式的后面 先算后面的..不断迭代.. #incl ...
- MathJax TeX & LaTeX
MathJax TeX & LaTeX mathcal https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-z ...
- NGINX configure auto generator
NGINX configure auto generator The easiest way to configure a performant, secure, and stable NGINX s ...
- 电信悦 me 智能网关
电信悦 me 智能网关 悦 me 智能网关 Q1:什么是电信悦 me 智能网关? 悦me网关是智慧家庭的核心终端,作为"光猫+智能路由器"的集合体, 采用了全新的硬件.外观及智能操 ...
- 找出 int 数组的平衡点 & 二叉树 / 平衡二叉树 / 满二叉树 / 完全二叉树 / 二叉查找树
找出 int 数组的平衡点 左右两边和相等, 若存在返回平衡点的值(可能由多个); 若不存在返回 -1; ``java int [] arr = {2,3,4,2,4}; ```js const ar ...
- 软件工程中的CI&CD
wiki 在软件工程中,CI/CD或CICD通常是指持续集成以及持续交付或持续部署的组合实践 持续集成 在软件工程中,持续集成(CI)是每天将所有开发人员的工作副本合并到共享主线中的一种做法.[1] ...
- Flutter: 粘贴板
文档 import 'package:flutter/services.dart'; /// 把文本复制进入粘贴板 Clipboard.setData(ClipboardData(text: &quo ...
- js字典
传送门https://www.2cto.com/kf/201709/680989.html 点击
- css命名规范和书写规范
1.位置属性(position, top, right, z-index, display, float等)2.大小(width, height, padding, margin)3.文字系列(fon ...