1878: [SDOI2009]HH的项链

Time Limit: 4 Sec  Memory Limit: 64 MB
Submit: 5317  Solved: 2624
[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

据说当时出这道题的时候,还没有主席树这东西

现在有了主席树,就成水题了

记L[i]为第i个数字上一次出现的位置,那么对于每次询问[x, y],答案就是这个区间内满足L[i]<x的数的个数

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct
{int l, r;int val;
}Tree;
Tree s[4000005];
int n, cnt, pos[1000005], L[100005], a[100005], t[100005];
int Build(int l, int r)
{int m, root;m = (l+r)/2;root = ++cnt;if(l==r){s[root].val = 0;return root;}s[root].l = Build(l, m);s[root].r = Build(m+1, r);s[root].val = s[s[root].l].val+s[s[root].r].val;return root;
}
int Update(int root, int k)
{int now, temp, m, l, r;now = temp = ++cnt;l = 1, r = n+1;while(l<r){m = (l+r)/2;s[now].val = s[root].val+1;if(k<=m){s[now].l = ++cnt;s[now].r = s[root].r;root = s[root].l;r = m;now = cnt;}else{s[now].r = ++cnt;s[now].l = s[root].l;root = s[root].r;l = m+1;now = cnt;}}s[now].val = s[root].val+1;return temp;
}
int Query(int root, int l, int r, int a, int b)
{int ans, m;ans = 0;if(l>=a && r<=b)return s[root].val;m = (l+r)/2;if(a<=m)ans += Query(s[root].l, l, m, a, b);if(b>=m+1)ans += Query(s[root].r, m+1, r, a, b);return ans;
}
int main(void)
{int i, m, l, r;scanf("%d", &n);for(i=2;i<=n+1;i++){scanf("%d", &a[i]);L[i] = max(pos[a[i]], 1);pos[a[i]] = i;}t[1] = Build(1, n+1);for(i=2;i<=n+1;i++)t[i] = Update(t[i-1], L[i]);scanf("%d", &m);while(m--){scanf("%d%d", &l, &r);l += 1, r += 1;printf("%d\n", Query(t[r], 1, n+1, 1, l-1)-Query(t[l-1], 1, n+1, 1, l-1));}return 0;
}

bzoj 1878: [SDOI2009]HH的项链(主席树)相关推荐

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

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

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

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

  3. bzoj 1878: [SDOI2009]HH的项链

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

  4. bzoj 1878: [SDOI2009]HH的项链 ——树状数组+ 差分

    Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得 ...

  5. BZOJ 1878: [SDOI2009]HH的项链 | 莫队

    题解: http://www.lydsy.com/JudgeOnline/problem.php?id=1878 题解: 莫队板子题 核心思想是对区间的询问离线之后按照合理的顺序来优化复杂度 一般的做 ...

  6. 【BZOJ】[SDOI2009]HH的项链

    [算法]主席树||离线+树状数组 [题解] 主席树经典应用:找区间不同的数字个数. 做法:记录每个数上一次出现的位置last[i],对last建权值线段树,对于区间询问last[i]<L的数字个 ...

  7. BZOJ 1878 HH的项链 | 主席树

    题意 询问区间有多少不同的数. 题解 和Luogu 1903一样,这道题也是用pre数组来求区间不同数的个数,这里pre[i]表示a[i]上一次出现的位置 +1,询问相当于查询区间内有多少pre小于等 ...

  8. bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链

    http://www.lydsy.com/JudgeOnline/problem.php?id=1878 之前用莫队做的,现在用树状数组 把每种数的第一个出现位置在树状数组中+1 nxt[i] 记录i ...

  9. bzoj1878: [SDOI2009]HH的项链

    树状数组的一类题目 #include<cstdio> #include<cstring> #include<iostream> #include<algori ...

最新文章

  1. XML DOM – 属性和方法概述
  2. 不努力提高效率,小姐姐都被人追走了:K8S一键部署了解一下?
  3. stylus 在静态页面上的使用经验
  4. Java 接口和抽象类可以被new么?——顺便总结内部类
  5. 图片在section上下居中_新媒体运营者关于图片使用的几大要点
  6. python通过文件路径读取图片
  7. 电子元器件/模块供应商汇总
  8. 非华为电脑实现多屏协同、一碰传
  9. 教程丨GIS制图教程01
  10. 七大江河水系--海河
  11. 为什么书上说是 TCP 四次挥手,但是实际会出现 TCP 三次挥手?
  12. java实现注销功能_8.6.2 登录注销功能的实现
  13. echarts地图上的标签为图片_百度地图标记点中添加Echarts图表
  14. Java设计一个类代表二维空间的一个点,设计一个类代表二维空间的一个圆,计算面积,,并写程序验证计算一个点(Point对象)是否在圆(Cricle对象)内
  15. 三个限免网站,助你白嫖正版付费软件/游戏
  16. [BZOJ3698]XWW的难题(有源汇有上下界的最大流)
  17. 海康威视NVR(网络硬盘录像机)回放功能 不依靠sdk实现
  18. Struts2中s标签的用法
  19. java redis快速入门_快速入门Redis系列(3)——Redis的JavaAPI操作(附带练习)
  20. PCS储能逆变并网模型 逆变侧采用背靠背三电平设计,SVPWM控制算法

热门文章

  1. python从入门到放弃表情图-Python 从入门到放弃(一)
  2. 什么是python基础教程-python基础教程之python是什么?概念解析
  3. python自学免费教程-python免费入门教程/求完整的Python入门教程
  4. cimco edit v5_iA Writer for Mac(写作软件)v5.6.3
  5. 对CMMI标准的简单理解
  6. 13 登陆_《星球大战:弹珠台》中文版即将登陆Switch 12月13日正式发售
  7. 蓝桥杯2014c++真题:切面条
  8. 耐克人脸识别_狄耐克智能交通再结一位“老铁”——与力高地产达成战略合作协议!...
  9. 利用计算机解决的生活问题,利用计算机解决经典动力学问题
  10. 两个linux系统拷贝文件,两台linux文件拷贝