题面

解析

这题本来莫队可以过的。

然而,对于某些加强的数据,莫队就得吸氧了。。

所以,本题解还将介绍另一种算法——树状数组。

首先,莫队就不用讲了吧(毕竟只是板子)。

那么,开始进入正题(似乎有点啰嗦)。

我们先将每个询问存下来(还是离线处理),

然后再以右端点为关键字从小到大排序。

然后,对于1~n中的每个点r,

记录下区间1~r中每种颜色最右边的位置,

即在树状数组中将每种颜色最右边的位置设为1。

显然,如果询问q的右端点正好为r的话,

那么对于q的左端点l,

这种记录方式是最优的。

因为如果不是记录的最右边的点的话,就有可能忽略。

所以,先把询问按右端点排序,

再O(n)扫一遍,

并用树状数组计算前缀和,统计答案就行了

具体看代码吧:

#include<bits/stdc++.h>
#define lowbit(a) (a&(-a))
using namespace std; inline int read(){
int sum=,f=;char ch=getchar();
while(ch>'' || ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){sum=sum*+ch-'';ch=getchar();}
return f*sum;
} const int MAXN=;
struct node{
int l,r,id;
}q[MAXN];
int n,m;
int ans[MAXN],t[MAXN],a[MAXN];
int pla[MAXN*]; bool cmp(node a,node b){
return a.r<b.r;
} inline void add(int x,int k){
for(int i=x;i<=n;i+=lowbit(i)){
t[i]+=k;
}
} inline int ask(int x){
int ret=;
for(int i=x;i;i-=lowbit(i)){
ret+=t[i];
}
return ret;
} int main(){
n=read();
for(int i=;i<=n;i++) a[i]=read();
m=read();
for(int i=;i<=m;i++) q[i].l=read(),q[i].r=read();
for(int i=;i<=m;i++) q[i].id=i;
sort(q+,q+m+,cmp);
int p=;
for(int i=;i<=n;i++){
if(pla[a[i]]){
add(pla[a[i]],-);
}
add(i,);pla[a[i]]=i;
while(q[p].r==i){
ans[q[p].id]=ask(i)-ask(q[p].l-);
p++;
}
}
for(int i=;i<=m;i++) printf("%d\n",ans[i]);
return ;
}

题解 【SDOI2009】HH的项链的更多相关文章

  1. [洛谷P1972][题解][SDOI2009]HH的项链

    别碰我! 自己还是太蒟了…… 看了好久,最后抄参考题解打出来的…… 前面的可能影响后面的,所以按照询问右端点排序 这时候维护一个前缀和数组就可以了, 那么问题又来了,去重? 可以这样,从前往后枚举,如 ...

  2. 【题解】P1972 [SDOI2009]HH的项链 - 树状数组

    P1972 [SDOI2009]HH的项链 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 \(HH\) 有一串由各种 ...

  3. 洛谷P1972 [SDOI2009]HH的项链 题解

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

  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. BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)

    1878: [SDOI2009]HH的项链 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1878 Description: HH有一串由 ...

  8. 【bzoj1878】[SDOI2009]HH的项链 - 树状数组 - 离线处理

    [SDOI2009]HH的项链 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4834  Solved: 2384[Submit][Status][Dis ...

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

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

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

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

随机推荐

  1. 关于tk.mybatis.spring.mapper.SpringBootBindUtil$SpringBoot2Bind.bind(SpringBootBindUtil.java:129) ~[mapper-spring-boot-autoconfigure-1.2.3.jar:na]的问题

    错误如下: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at tk.mybatis.spring.m ...

  2. spark内核篇-任务调度机制

    在生产环境中,spark 部署方式一般都是 yarn-cluster 模式,本文针对该模式进行讲解,当然大体思路也适用于其他模式 基础概念 一个 spark 应用包含 job.stage.task 三 ...

  3. python基础知识0-5(单双向队列)

    #多项队列import collections #导入模块d = collections.deque() #deque方法d.append('1') #添加元素d.appendleft('2')d.a ...

  4. 使用tqdm实现下载文件进度条

    1.获取下载链接 下载链接为:http://fastsoft.onlinedown.net/down/Fcloudmusicsetup2.5.5.197764.exe 2.使用tqdm实现 2.1.从 ...

  5. 高德地图API-设置考勤范围

    <template> <div class="page-setting-setgps"> <!--head--> <div class=& ...

  6. vue-cli实现原理

    分析:https://kuangpf.com/vue-cli-analysis/create/basic-verification.html vue-cli-service :https://blog ...

  7. 云端js动态效果

    效果图: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  8. Base64加密后有换行回车的解决办法

    据RFC 822规定,每76个字符,还需要加上一个回车换行 有时就因为这些换行弄得出了问题,解决办法如下,替换所有换行和回车 String bTemp = Base64.encodeBase64Str ...

  9. java(堆、栈、常量池)

    参考链接: https://www.cnblogs.com/wanson/articles/10819189.html

  10. 查看TensorFlow的版本以及安装路径

    查看TensorFlow的版本以及安装路径 进入到Python环境 import tensorflow as tf tf.__version__ # 查看版本 tf.__path__ # 查看安装路径 ...