BZOJ 1878 HH的项链 (树状数组+离线)
题目大意:给你一个序列,求某区间出现不同的数的个数。
貌似离线树状数组是最好的解法
先把所有询问挂在它们询问的右端点上
然后从头到尾遍历这个序列,记录这个位置的值上一次出现的位置
那么,当遍历到第i位时,如果a[i]在之前出现过,就在它上一次出现的位置-1
这个操作的意义是,第i位已经有a[i]了,那么上一次出现a[i]的位置已经失去意义
接着在这个位置+1,更新last[a[i]]。差分操作用树状数组维护
然后我们遍历以这个位置为结尾的所有询问,用树状数组查前缀和,因为在a[i]相同的位置不会重复打差分,所以query(r)-query(l-1)即为这个询问的答案。
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#define inf 0x3f3f3f3f
#define ll long long
#define N 500100
#define maxn 1000000
using namespace std;
//re
int n,m,cte;
int a[N],head[N];
int lst[N*],sum[N*];
struct Ques{
int l,r,ans,id;
}ques[N];
struct EDGE{
int to,nxt;
}edge[N];
void edge_add(int u,int v)
{
cte++;
edge[cte].to=v;
edge[cte].nxt=head[u];
head[u]=cte;
}
int cmp1(Ques s1,Ques s2) {return s1.r<s2.r;}
int cmp2(Ques s1,Ques s2) {return s1.id<s2.id;}
void update(int x,int w) {for(int i=x;i<=maxn;i+=(i&(-i)))sum[i]+=w;}
int query(int x) {int ans=;for(int i=x;i>;i-=(i&(-i)))ans+=sum[i];return ans;} int main()
{
//freopen("data.in","r",stdin);
scanf("%d",&n);
memset(head,-,sizeof(head));
for(int i=;i<=n;i++) scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=;i<=m;i++)
scanf("%d%d",&ques[i].l,&ques[i].r),ques[i].id=i;
sort(ques+,ques+m+,cmp1);
for(int i=;i<=m;i++)
edge_add(ques[i].r,i);
for(int i=;i<=n;i++)
{
if(lst[a[i]]) update(lst[a[i]],-);
update(i,),lst[a[i]]=i;
for(int j=head[i];j!=-;j=edge[j].nxt){
int v=edge[j].to;
ques[v].ans=query(ques[v].r)-query(ques[v].l-);
}
}
sort(ques+,ques+m+,cmp2);
for(int i=;i<=m;i++) printf("%d\n",ques[i].ans);
return ;
}
BZOJ 1878 HH的项链 (树状数组+离线)的更多相关文章
- BZOJ1878: [SDOI2009]HH的项链[树状数组 离线]
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3486 Solved: 1738[Submit][Statu ...
- BZOJ1878: [SDOI2009]HH的项链[树状数组+离线 | 主席树]
题意: 询问区间不同种类颜色数 [2016-11-15] 离线好厉害 对于每一个区间询问,一个数只考虑一次,那么考虑他最后出现的一次 将询问按r排序 从1到n扫描,用树状数组维护一个位置应不应该考虑( ...
- 【bzoj1878】[SDOI2009]HH的项链 - 树状数组 - 离线处理
[SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4834 Solved: 2384[Submit][Status][Dis ...
- bzoj 1878: [SDOI2009]HH的项链 ——树状数组+ 差分
Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一 段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此他的项链变得 ...
- [SDOI2009]HH的项链 树状数组 BZOJ 1878
题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此,他的项链 ...
- BZOJ 1878 SDOI2009 HH的项链 树状数组/莫队算法
题目大意:给定一个序列.求一个区间内有多少个不同的数 正解是树状数组 将全部区间依照左端点排序 然后每次仅仅统计左端点開始的每种颜色的第一个数即可了 用树状数组维护 我写的是莫队算法 莫队明显能搞 m ...
- [BZOJ1878] [SDOI2009] HH的项链 (树状数组)
Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变 ...
- 【bzoj1878】[SDOI2009]HH的项链 树状数组
题目描述 HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变得越来越长.有一 ...
- bzoj1878 [SDOI2009]HH的项链——树状数组
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1878 离线树状数组,巧妙的思路呢: 给每种项链记录一个最后出现的位置lst,根据项链最后出现 ...
随机推荐
- BZOJ 3439 Kpm的MC密码 (Trie树+线段树合并)
题面 先把每个串反着插进$Trie$树 每个节点的子树内,可能有一些节点是某些字符串的开头 每个节点挂一棵权值线段树,记录这些节点对应的原来字符串的编号 查询的时候在线段树上二分即可 为了节省空间,使 ...
- 【Codeforces 276C】Little Girl and Maximum Sum
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 最后的和. 其实可以看成是 ∑bi*ai 的形式. 这里的bi这个系数表示的是有多少个区间覆盖了ai这个元素. 既然这样的话. 那么 ...
- c#设置button透明
c#设置button透明 1.使用代码进行设置: this.button_welcom_login.FlatStyle = System.Windows.Forms.FlatStyle.Flat; t ...
- oracle导入expdp、导出impdp数据库用户
仅限oracle服务器上执行:把172.16.251.136:1521/orcl的AMI4_2用户导入到192.168.2.30:1521/orclss中的AMI1用户: 关于导入导出更详细的见文章 ...
- 计算机网络系统--常用DOS命令
01.名称:md 用法:md “文件夹名” 用处:批量建立文件夹 02.关机命令 shutdown At 18:00 shutdown –s 18:00关机 shutdown -s -t 3 ...
- 完整的html+css+javascript实现跟随鼠标移动显示选中效果
1,显示效果: 2,html结构 <div class="process_list-lpu"> <div class="process_line&quo ...
- tomcat设置编码utf8
1. Java类: CharacterEncodingFilter import javax.servlet.*; import java.io.IOException; public ...
- [SQL]存储过程建表
create PROC [dbo].CreateUserTable ( @name NVARCHAR(60) ) AS DECLARE @a NVARCHAR(max) SET @a='create ...
- [SharePoint][SharePoint Designer 入门经典]Chapter8 XSLT数据试图和表单
本章概要: 1.不是利用XSLT web部件 2.使用XSLT web部件创建数据试图 3.使用XSLT表单web部件创建自定义表单 4.利用自定义动作执行列表表单
- 详解Mysql分布式事务XA(跨数据库事务)
详解Mysql分布式事务XA(跨数据库事务) 学习了:http://blog.csdn.net/soonfly/article/details/70677138 mysql执行XA事物的时候,mysq ...