luogu1972 HH的项链(树状数组)
无修改、询问区间种类数的问题可以很容易地用树状数组解决
我们先给询问按右端点排序,然后推着做,每次让a[i]++,表示i处新增了一个种类
但是这样会和前面的有重复,我们只要记下每个种类上次在哪里出现过,当这次又出现了,把前面的那次减掉就可以了
每次处理完之后,就可以计算所有右端点为i的区间的答案,就是这个区间右端点的前缀和减去左端点-1的前缀和
#include<bits/stdc++.h>
#define pa pair<int,int>
#define ll long long
using namespace std;
const int maxn=5e5+,maxm=1e6+; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int N,M,tr[maxn];
int col[maxn],lst[maxm],ans[maxn];
struct Q{
int l,r,i;
}que[maxn]; inline int lowbit(int x){return x&(-x);}
inline void add(int x,int y){
for(;x<=N;x+=lowbit(x)) tr[x]+=y;
}
inline int query(int x){
int re=;for(;x;x-=lowbit(x)) re+=tr[x];return re;
} inline bool cmp(Q a,Q b){
return a.r<b.r;
} int main(){
int i,j,k;
N=rd();
for(i=;i<=N;i++) col[i]=rd();
M=rd();
for(i=;i<=M;i++){
que[i].l=rd(),que[i].r=rd(),que[i].i=i;
}sort(que+,que+M+,cmp);
for(i=,j=;i<=N;i++){
if(lst[col[i]]) add(lst[col[i]],-);
add(i,);lst[col[i]]=i;
for(;que[j].r==i;j++){
ans[que[j].i]=query(i)-query(que[j].l-);
}
}
for(i=;i<=M;i++) printf("%d\n",ans[i]);
return ;
}
luogu1972 HH的项链(树状数组)的更多相关文章
- [BZOJ1878] [SDOI2009] HH的项链 (树状数组)
		
Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变 ...
 - bzoj 1878: [SDOI2009]HH的项链 ——树状数组+ 差分
		
Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得 ...
 - 【bzoj1878】[SDOI2009]HH的项链  树状数组
		
题目描述 HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变得越来越长.有一 ...
 - [SDOI2009]HH的项链 树状数组 BZOJ 1878
		
题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...
 - luogu P1972 [SDOI2009]HH的项链 |树状数组 或 莫队
		
题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链变得越来越长. ...
 - 【题解】P1972 [SDOI2009]HH的项链 - 树状数组
		
P1972 [SDOI2009]HH的项链 声明:本博客所有题解都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 题目描述 \(HH\) 有一串由各种 ...
 - 【P1972】HH的项链——树状数组+询问离线
		
(题面摘自luogu) 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集 ...
 - bzoj1878 [SDOI2009]HH的项链——树状数组
		
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1878 离线树状数组,巧妙的思路呢: 给每种项链记录一个最后出现的位置lst,根据项链最后出现 ...
 - 洛谷 P1972 [SDOI2009]HH的项链——树状数组
		
先上一波题目 https://www.luogu.org/problem/P1972 这道题是询问区间内不同数的个数 明显不是正常的数据结构能够维护的 首先考虑 因为对于若干个询问的区间[l,r],如 ...
 
随机推荐
- NuGet 使用笔记
			
环境准备 1. 下载nuget : https://www.nuget.org/downloads 2. 设置到环境变量Path, 使生效:在Cmd打入: set path=abc 关闭Cmd (C ...
 - 成功安装的Sublime Text3
			
安装指南 1:下载官网:https://www.sublimetext.com/3 2:安装指南:https://jingyan.baidu.com/article/b0b63dbfe1b8ff4a4 ...
 - 软件工程附加篇章:进阶四则运算和Core对接
			
0x01 :计算模块(Core)和前端对接 首先特别结对编程刘乾组(SivilTaram)提供的计算模块(Core),http://www.cnblogs.com/SivilTaram/p/48599 ...
 - Python学习笔记 ---第三章
			
函数 函数是代码的一种抽象 函数 说明 abs 绝对值 max 最大值 hex 转换为16进制 强制数据类型转换 int('123') 123 int(12.35) 12 srt(100) '100' ...
 - java中字符串的排序(1)
			
按照前段时间在快速.冒泡等排序的评论中提到是否可以进行字符串的排序,由于最近有考试,时间比较紧,所以今天才实现此功能.此功能是针对一串字符川进行的实现,运行后的结果如下所示: 具体的程序相对较为简单, ...
 - 关于RESTful 的概念
			
1.REST 是面向资源的,这个概念非常重要,而资源是通过 URI 进行暴露.URI 的设计只要负责把资源通过合理方式暴露出来就可以了.对资源的操作与它无关,操作是通过 HTTP动词来体现,所以RES ...
 - Filter(转载)
			
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
 - nodejs框架对比
			
最近想实操nodejs,在选择框架的时候,查阅后大致整理为如下表格内容. 此处列举下才开始使用eggjs框架: 1.其基于koa开发: 2.若为企业级项目,用其脚手架egg-inint搭建会快很多,后 ...
 - Chrome 启动参数列表
			
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --type=gpu-process --channel ...
 - 通过JDOM实现XML与String的相互转换
			
利用JDOM实现XML与String之间的相互转换: package com.util.xml; import java.io.ByteArrayOutputStream; import java.i ...