洛谷 P1972 HH的项链 题解

时间:2022-09-06 14:56:55

题面

本题其实主要就这几点:

1.离线,以右端点排序(从小到大);

2.建立树状数组c[],c[i]表示从1~i中有多少种不同的数字;

3.对于每次查询的答案就是sum(r)-sum(l-1);

4.由于问题是离线排序回答,所以应该注意输出顺序(离散化前的顺序);

Q:直接统计前缀和,然后对于每次询问O(1)输出不行吗?

A:当然不行,因为仅仅确保了sum[r]的正确性,无法确保sum[l-1]的正确性;比如说:1 2 3 1 1 1 ,区间[2,5]的个数是3,然而sum[5]=3,sum[1]=1,sum[5]-sum[1]=2;(原因是第一位的1在sum[5]和sum[1]中都算了一遍)

Q:为什么要离散化?

A:为了保证我们从左到右扫描扫到i时确保当存在a[i]时1~i中树状数组的答案;这样可以保证不仅仅sum(r)的正确性,也可以保证sum(l-1)的正确性;

#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[];
struct haha{
int pos;
int l;
int r;
}lala[];
bool cmp(haha x,haha y)
{
return x.r<y.r;
}
int c[];
inline int lowbit(int x)
{
return x&(-x);
}
void add(int x,int value)
{
while(x<=n){
c[x]+=value;
x+=lowbit(x);
}
return;
}
int sum(int x)
{
int res=;
while(x>){
res+=c[x];
x-=lowbit(x);
}
return res;
}
int nxt[];
int ans[];
int main ()
{
cin>>n;
for(register int i=;i<=n;i++){
scanf("%d",&a[i]);
}
cin>>m;
for(register int i=;i<=m;i++){
int l,r;
scanf("%d%d",&l,&r);
lala[i].pos=i;
lala[i].l=l;
lala[i].r=r;
}
sort(lala+,lala++m,cmp);
int st=;
for(register int i=;i<=m;i++){
for(register int j=st;j<=lala[i].r;j++){
if(nxt[a[j]]){
add(nxt[a[j]],-);
}
add(j,);
nxt[a[j]]=j;
}
st=lala[i].r+;
ans[lala[i].pos]=sum(lala[i].r)-sum(lala[i].l-);
}
for(int i=;i<=m;i++){
cout<<ans[i]<<endl;
}
}

洛谷 P1972 HH的项链 题解的更多相关文章

  1. &lbrack;洛谷 P1972&rsqb; HH的项链&lpar;SDOI2009&rpar;

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

  2. BZOJ1878 洛谷1972 HH的项链题解

    洛谷链接 BZOJ链接 看到这样不用修改的题目,应该佷容易就联想到了离线来处理. 我们发现若将询问按照r来排序,排完后每次对答案有贡献的仅是每个颜色最后出现的位置 我们用next[i]表示i处颜色之前 ...

  3. 洛谷P1972 HH的项链【树状数组】

    题目:https://www.luogu.org/problemnew/show/P1972 题意:给定一个长度为n的序列,数字表示珠子的种类.m次查询每次询问给定区间内珠子的种类数. 思路:可以说是 ...

  4. 洛谷P1972 HH的项链

    传送门啦 分析: 题目描述不说了,大意是,求一段区间内不同元素的种数. 看到区间,我们大概先想到的是暴力(然后炸掉).线段树.树状数组.分块. 下面给出的是一种树状数组的想法. 首先,对于每一段区间里 ...

  5. 洛谷1972 HH的项链 树状数组查询区间内不同的数的数量

    题目链接:https://www.luogu.com.cn/problem/P1972 题意大致是:给定一个序列长度为n,给出m个查询区间,要求响应是区间内不同的数的个数.为此我们考虑到树状数组的区间 ...

  6. HH的项链题解(离线思想&plus;链表&plus;树状数组)

    本人第一篇博客重磅推出!!! 希望各位朋友以后多多捧场也多给写意见(我个人喜欢把题解写得啰嗦一点,因为这样方便理解,各位巨佬勿喷) 来讲一道提高+/省选-的骚题:HH的项链(这个HH你理解成皇后呵呵哈 ...

  7. 洛谷P1783 海滩防御 分析&plus;题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  8. 洛谷P4047 &lbrack;JSOI2010&rsqb;部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  9. 洛谷P1155 双栈排序题解&lpar;图论模型转换&plus;二分图染色&plus;栈&rpar;

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

随机推荐

  1. Linux IPC tcp&sol;ip socket 编程

    模型 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include &lt ...

  2. Slave&lowbar;SQL&lowbar;Running&colon; No mysql同步故障解决方法

    Slave_SQL_Running: No mysql同步故障解决      今天检查数据库发现一台MySQL Slave未和主机同步,查看Slave状态:mysql> show slave s ...

  3. AppCache 离线存储 应用程序缓存 API 及注意事项

    使用ApplicationCache接口实现离线缓存 原文:http://www.mb5u.com/HTML5/html5_96464.html 推荐:html5 application cache遇 ...

  4. 最小费用最大流 POJ2195-Going Home

    网络流相关知识参考: http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html 出处:優YoU http://blog.csdn. ...

  5. POJ 1486 Sorting Slides &lpar;二分图关键匹配边&rpar;

    题意 给你n个幻灯片,每个幻灯片有个数字编号1~n,现在给每个幻灯片用A~Z进行编号,在该幻灯片范围内的数字都可能是该幻灯片的数字编号.问有多少个幻灯片的数字和字母确定的. 思路 确定幻灯片的数字就是 ...

  6. StructureMap经典的IoC&sol;DI容器

    StructureMap是一款很老的IoC/DI容器,从2004年.NET 1.1支持至今. 一个使用例子 //创建业务接口 public interface IDispatchService { } ...

  7. 【设计模式】建造者模式 Builder Pattern

    前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...

  8. 动态令牌验证遇到的问题(判断用户长按backspace键)

    因为最近负责泰康项目的前端工作,他们的登录需要进行安全验证,也就是所谓的双因素验证,即在OA平台登录过后,还需要安全部门发送安全令牌进行验证.令牌验证效果如下: 主要功能有:1.默认第一项focus. ...

  9. Eclipse导入war包二次开发

    有实际项目在跑的war包,却没有源码,苦于想查看源码,身处运维组为研发组看不起,拿不到源码,只能自己来反编译了. 其实在解压war包后,可以看到文件夹中,已经存在了jsp文件,但是却没有逻辑代码层(a ...

  10. 后缀自动机&lpar;SAM&rpar;速成手册!

    正好写这个博客和我的某个别的需求重合了...我就来讲一讲SAM啦qwq 后缀自动机,也就是SAM,是一种极其有用的处理字符串的数据结构,可以用于处理几乎任何有关于子串的问题,但以学起来异常困难著称(在 ...