http://www.lydsy.com/JudgeOnline/problem.php?id=1878

之前用莫队做的,现在用树状数组

把每种数的第一个出现位置在树状数组中+1

nxt[i] 记录i后面第一个数字和i相同的位置

对于每一个询问[l,r],输出[1,r]内数的种类-只在[1,l-1]内数的种类

[1,r]内数的种类就是记录的 每种数的第一个出现位置

只在[1,l-1]内数的种类:

对于<l的i,对应的nxt[i]在树状数组中+1,

这样query(r)-query(l-1)时,

只在[1,l-1]内的被减走

既在[1,l-1] 又在[l,r] 内的减1又加1

#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 50001
#define M 200001
#define K 1000001 int n;
int a[N];
struct node
{
int l,r;
int id;
}e[M]; bool have[K]; int nxt[N],last[K]; int c[N+]; int ans[M]; #define lowbit(x) x&-x void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} bool cmp(node p,node q)
{
return p.l<q.l;
} void add(int x)
{
while(x<=n+)
{
c[x]++;
x+=lowbit(x);
}
} int query(int x)
{
int sum=;
while(x)
{
sum+=c[x];
x-=lowbit(x);
}
return sum;
} int main()
{
read(n);
for(int i=;i<=n;++i)
{
read(a[i]);
if(!have[a[i]])
{
have[a[i]]=true;
add(i);
}
}
for(int i=n;i;--i)
{
if(!have[a[i]]) nxt[i]=n+;
else
{
if(!last[a[i]])
{
nxt[i]=n+;
last[a[i]]=i;
}
else
{
nxt[i]=last[a[i]];
last[a[i]]=i;
}
}
}
int m;
read(m);
for(int i=;i<=m;++i)
{
read(e[i].l);
read(e[i].r);
e[i].id=i;
}
sort(e+,e+m+,cmp);
int j=;
for(int i=;i<=m;++i)
{
while(j<e[i].l) add(nxt[j++]);
ans[e[i].id]=query(e[i].r)-query(e[i].l-);
}
for(int i=;i<=m;++i) cout<<ans[i]<<'\n';
}

1878: [SDOI2009]HH的项链

Time Limit: 4 Sec  Memory Limit: 64 MB
Submit: 5156  Solved: 2549
[Submit][Status][Discuss]

Description

HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一
段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此他的项链变得越来越长。有一天,他突然提出了一
个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答。。。因为项链实在是太长了。于是,他只
好求助睿智的你,来解决这个问题。

Input

第一行:一个整数N,表示项链的长度。 
第二行:N个整数,表示依次表示项链中贝壳的编号(编号为0到1000000之间的整数)。 
第三行:一个整数M,表示HH询问的个数。 
接下来M行:每行两个整数,L和R(1 ≤ L ≤ R ≤ N),表示询问的区间。
N ≤ 50000,M ≤ 200000。

Output

M行,每行一个整数,依次表示询问对应的答案。

Sample Input

6
1 2 3 4 3 5
3
1 2
3 5
2 6

Sample Output

2
2
4

bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链的更多相关文章

  1. BZOJ1878 SDOI2009 HH的项链 【莫队】

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

  2. BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)

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

  3. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  4. [bzoj1878][SDOI2009]HH的项链_莫队

    HH 的项链 bzoj-1878 SDOI-2009 题目大意:给定一个n个数的序列.m次询问,每次询问一段区间内数的种类数. 注释:$1\le n\le 5\cdot 10^4$,$1\le m\l ...

  5. BZOJ1878 [SDOI2009] HH的项链 [莫队,卡常]

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

  6. [bzoj1878][SDOI2009]HH的项链_树状数组

    HH的项链 bzoj-1878 SDOI-2009 题目大意:给定一个n个数的序列,m次查询.查询区间数的种类个数. 注释:$1\le n \le 5\cdot 10^4$,$1\le m\le 2\ ...

  7. bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战

    http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...

  8. bzoj千题计划288:bzoj1876: [SDOI2009]SuperGCD

    http://www.lydsy.com/JudgeOnline/problem.php?id=1876 高精压位GCD 对于  GCD(a, b)  a>b 若 a 为奇数,b 为偶数,GCD ...

  9. bzoj千题计划287:bzoj1228: [SDOI2009]E&D

    http://www.lydsy.com/JudgeOnline/problem.php?id=1228 打SG函数表,找规律: 若n是奇数m是奇数,则SG(n,m)=0 若n是偶数m是偶数,则SG( ...

随机推荐

  1. android studio 下载 sdk 失败

    android studio 打开项目出现以下错误时,点击去安装,会提示"All packages are not available for download" 错误. 解决办法 ...

  2. Mvc4_语法基础介绍

    @model MvcApplicationTest.Models.User @{ ViewBag.Title = "Index"; } <script type=" ...

  3. zookeeper应用

    1. 下载zookeeper-3.4.10.tar.gz 2.tar zxvf zoo*.tar.gz 3. cd /usr/local/zookeeper/zookeeper-3.4.10/conf ...

  4. linux内核分析第五周学习笔记

    linux内核分析第五周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  5. Ns3 构建哑铃型拓扑,并实现两个点的TCP连接(详细请戳全文)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaUAAADlCAIAAAB8n38hAAAV8UlEQVR4nO3dMWjjyBoH8CkNj1uc5v

  6. Maven 学习笔记——Maven环境配置(1)

    在学习Selenium的过程中,接触到了Maven(项目管理工具),不至于学一路忘一路,左耳朵进右耳多出,还是决定边学边记录,毕竟听的不如 看的,看的不如写的吗.首先学一样东西,肯定得明确学的是什么, ...

  7. MySQL的order by时区分大小写

    Mysql 查询区分大小写 mysql查询默认是不区分大小写的 如: select * from some_table where str=‘abc'; select * from some_tabl ...

  8. Cannot read lifecycle mapping metadata for artifact org.apache.maven.plugins问题的解决

    今天换了个maven仓库,结果新建maven工程的时候,忽然报错: Cannot read lifecycle mapping metadata for artifact org.apache.mav ...

  9. python自动化之PDF

    ###################################处理PDF和Word文档################################### ''' PDF和Word文档是二进 ...

  10. c# DataGridView绑定DataTable对象之后总会多一行

    DataGridView 属性 AllowUserToAddRows = false