bzoj 1878: [SDOI2009]HH的项链(主席树)
1878: [SDOI2009]HH的项链
Time Limit: 4 Sec Memory Limit: 64 MB
Submit: 5317 Solved: 2624
[Submit][Status][Discuss]
Description
Input
Output
M行,每行一个整数,依次表示询问对应的答案。
Sample Input
Sample Output
据说当时出这道题的时候,还没有主席树这东西
现在有了主席树,就成水题了
记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的项链(主席树)相关推荐
- BZOJ 1878: [SDOI2009]HH的项链
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 3548 Solved: 1757 [Submit][Sta ...
- BZOJ 1878: [SDOI2009]HH的项链( BIT )
离线处理 , 记下询问的左右端点并排序 , 然后可以利用树状数组 , 保证查询区间时每种颜色只计算一次 ------------------------------------------------ ...
- bzoj 1878: [SDOI2009]HH的项链
传送门:点我 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因 ...
- bzoj 1878: [SDOI2009]HH的项链 ——树状数组+ 差分
Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得 ...
- BZOJ 1878: [SDOI2009]HH的项链 | 莫队
题解: http://www.lydsy.com/JudgeOnline/problem.php?id=1878 题解: 莫队板子题 核心思想是对区间的询问离线之后按照合理的顺序来优化复杂度 一般的做 ...
- 【BZOJ】[SDOI2009]HH的项链
[算法]主席树||离线+树状数组 [题解] 主席树经典应用:找区间不同的数字个数. 做法:记录每个数上一次出现的位置last[i],对last建权值线段树,对于区间询问last[i]<L的数字个 ...
- BZOJ 1878 HH的项链 | 主席树
题意 询问区间有多少不同的数. 题解 和Luogu 1903一样,这道题也是用pre数组来求区间不同数的个数,这里pre[i]表示a[i]上一次出现的位置 +1,询问相当于查询区间内有多少pre小于等 ...
- bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 之前用莫队做的,现在用树状数组 把每种数的第一个出现位置在树状数组中+1 nxt[i] 记录i ...
- bzoj1878: [SDOI2009]HH的项链
树状数组的一类题目 #include<cstdio> #include<cstring> #include<iostream> #include<algori ...
最新文章
- XML DOM – 属性和方法概述
- 不努力提高效率,小姐姐都被人追走了:K8S一键部署了解一下?
- stylus 在静态页面上的使用经验
- Java 接口和抽象类可以被new么?——顺便总结内部类
- 图片在section上下居中_新媒体运营者关于图片使用的几大要点
- python通过文件路径读取图片
- 电子元器件/模块供应商汇总
- 非华为电脑实现多屏协同、一碰传
- 教程丨GIS制图教程01
- 七大江河水系--海河
- 为什么书上说是 TCP 四次挥手,但是实际会出现 TCP 三次挥手?
- java实现注销功能_8.6.2 登录注销功能的实现
- echarts地图上的标签为图片_百度地图标记点中添加Echarts图表
- Java设计一个类代表二维空间的一个点,设计一个类代表二维空间的一个圆,计算面积,,并写程序验证计算一个点(Point对象)是否在圆(Cricle对象)内
- 三个限免网站,助你白嫖正版付费软件/游戏
- [BZOJ3698]XWW的难题(有源汇有上下界的最大流)
- 海康威视NVR(网络硬盘录像机)回放功能 不依靠sdk实现
- Struts2中s标签的用法
- java redis快速入门_快速入门Redis系列(3)——Redis的JavaAPI操作(附带练习)
- PCS储能逆变并网模型 逆变侧采用背靠背三电平设计,SVPWM控制算法
热门文章
- python从入门到放弃表情图-Python 从入门到放弃(一)
- 什么是python基础教程-python基础教程之python是什么?概念解析
- python自学免费教程-python免费入门教程/求完整的Python入门教程
- cimco edit v5_iA Writer for Mac(写作软件)v5.6.3
- 对CMMI标准的简单理解
- 13 登陆_《星球大战:弹珠台》中文版即将登陆Switch 12月13日正式发售
- 蓝桥杯2014c++真题:切面条
- 耐克人脸识别_狄耐克智能交通再结一位“老铁”——与力高地产达成战略合作协议!...
- 利用计算机解决的生活问题,利用计算机解决经典动力学问题
- 两个linux系统拷贝文件,两台linux文件拷贝