luogu1972:HH的项链
题目描述 HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答……因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。 输入输出格式 输入格式:
第一行:一个整数N,表示项链的长度。 第二行:N 个整数,表示依次表示项链中贝壳的编号(编号为0 到1000000 之间的整数)。 第三行:一个整数M,表示HH 询问的个数。 接下来M 行:每行两个整数,L 和R( ≤ L ≤ R ≤ N),表示询问的区间。 输出格式:
M 行,每行一个整数,依次表示询问对应的答案。 输入输出样例 输入样例#: 输出样例#: 说明 数据范围: 对于100%的数据,N <= ,M <= 。
题目
芒果君:昨天躺在床上想了半天,直到今天吃早饭才想出20分暴力,隐隐约约感觉要前缀和,还要把查询按左端点排序,不过后面觉得没用就都删了。结果离正解越来越远QAQ………………暴力:预处理找到当前数下一次出现的位置jp,查询l~r扫一遍,要是jp在区间内就说明有重复的数。那不就是说重复的数里只有一个是对答案有贡献的,最左最右都可以。用树状数组维护,如果是最左,一开始只将数字第一次出现的位置加入,查询排序,再扫一遍1~n,看有哪些查询可以做了,然后当前的数字就会失效,应该把它的jp加入。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<bitset>
#define inf 1<<29
using namespace std;
typedef long long ll;
inline int read()
{
int ret();
char ch=getchar();
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<=''){
ret=ret*+ch-'';
ch=getchar();
}
return ret;
}
struct Query{
int l,r,id,ans;
}q[];
int n,m,pre[],l,r,cnt=,jp[],tree[],x;
bool cmp1(Query x,Query y)
{
if(x.l==y.l) return x.r<y.r;
return x.l<y.l;
}
bool cmp2(Query x,Query y){return x.id<y.id;}
void insert(int x,int val)
{
for(;x<=n;x+=x&-x) tree[x]+=val;
}
int query(int x)
{
int ret();
for(;x;x-=x&-x) ret+=tree[x];
return ret;
}
int main()
{
n=read();
for(int i=;i<=n;++i){
jp[i]=inf;
x=read();
if(pre[x]) jp[pre[x]]=i;
else insert(i,);
pre[x]=i;
}
m=read();
for(int i=;i<=m;++i) q[i].l=read(),q[i].r=read(),q[i].id=i;
sort(q+,q+m+,cmp1);
for(int i=;i<=n;++i){
while(q[cnt].l==i){
q[cnt].ans=query(q[cnt].r)-query(q[cnt].l-);
cnt++;
}
if(jp[i]!=inf) insert(jp[i],);
if(cnt>m) break;
}
sort(q+,q+m+,cmp2);
for(int i=;i<=m;++i) printf("%d\n",q[i].ans);
return ;
}
luogu1972:HH的项链的更多相关文章
- luogu1972 HH的项链(树状数组)
无修改.询问区间种类数的问题可以很容易地用树状数组解决 我们先给询问按右端点排序,然后推着做,每次让a[i]++,表示i处新增了一个种类 但是这样会和前面的有重复,我们只要记下每个种类上次在哪里出现过 ...
- BZOJ 1878: [SDOI2009]HH的项链
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3548 Solved: 1757[Submit][Statu ...
- BZOJ-1878 HH的项链 树状数组+莫队(离线处理)
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 2701 Solved: 1355 [Submit][Statu ...
- 【BZOJ】【1878】【SDOI2009】HH的项链
树状数组/前缀和 Orz lct1999 好神的做法... 先看下暴力的做法:对于区间[l,r],我们依次扫过去,如果这个数是第一次出现,那么我们种类数+1. 我们发现:区间中相同的几个数,只有最左边 ...
- 【BZOJ1878】[SDOI2009]HH的项链 离线BIT
1878: [SDOI2009]HH的项链 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义 ...
- Codevs 2307[SDOI2009]HH的项链
同题: Codevs 2307 HH的项链 BZOJ 1878 HH的项链 洛谷 1972 HH的项链 2009年省队选拔赛山东 时间限制: 1 s 空间限 ...
- BZOJ 1878: [SDOI2009]HH的项链 离线树状数组
1878: [SDOI2009]HH的项链 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- Bzoj 1878: [SDOI2009]HH的项链 莫队
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2717 Solved: 1363[Submit][Statu ...
- BZOJ 1878: [SDOI2009]HH的项链( BIT )
离线处理 , 记下询问的左右端点并排序 , 然后可以利用树状数组 , 保证查询区间时每种颜色只计算一次 ------------------------------------------------ ...
- 洛谷 P1972 [SDOI2009]HH的项链【莫队算法学习】
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
随机推荐
- java.lang.OutOfMemoryError:PermGen space tomcat7 内存溢出
Tomcat 解决 在启动项目的时候,会报java.lang.OutOfMemoryError:PermGen space错误. 在tomcat/bin/catalina.sh windows li ...
- 使用jsonpath解析多层嵌套的json响应信息
Python自带的json库可以把请求转为字典格式, 但在多层嵌套的字典中取值往往要进行多次循环遍历才能取到相应的数据, 如: res_dict = { "code": 0, &q ...
- mac 安装 mysql 5.7
下载 https://dev.mysql.com/downloads/mysql/5.7.html#downloads 下一步,经过一系列安装步骤后,会跳出一个这样的界面,请注意!!! 上面红框中是你 ...
- CPU占用高系统反应慢之问题定位
今天在看到公司群里有关于测试反应测试服务器比较卡,调用调用超时,响应很慢,成功率低的问题,然后想着去处理这个问题. 本着开发的精神,摒弃网管的水平,寻找问题的根源. 主要从如下几个方面入手: 1:查询 ...
- Android自定义view绘图
一.新建一个视图类,继承自View,重写OnDraw()函数,在函数内绘图 public class myView extends View {//新建一个视图类,继承自View myView(Con ...
- 让vim更加智能化
从此,让我的vim更加的智能化,整整用了一个周日,基本是值得的: "新建.c\.cpp\.python\.sh等文件时,使用定义的函数SetTitle,自动插入文件头 func SetTit ...
- 小程序tabBar的使用
这个selectedIconPath一定要写,否则选中的那个图片是不会显示的 下面是不写的现象: onTabItemTap的使用---下面的现象说明:只有tab值向哪个页面才会触发.
- CSS绘制三角形—border法
1. 实现一个简单的三角形 使用CSS盒模型中的border(边框)即可实现如下所示的三角形: CSS实现简单三角形 实现原理: 首先来看在为元素添加border时,border的样子:假设有如下 ...
- java读取excel文件数据导入mysql数据库
这是我来公司的第二周的一个小学习任务,下面是实现过程: 1.建立maven工程(方便管理jar包) 在pom.xml导入 jxl,mysql-connector 依赖 可以在maven仓库搜索 2.建 ...
- Homebrew 使用国内镜像
在国内的网络环境下使用 Homebrew 安装软件的过程中,可能会长时间卡在 Updating Homebrew ... 方法一:按command + c 取消本次更新操作,直接安装软件 方法二:设置 ...