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 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
随机推荐
- Yarn 配置阿里源
1.查看一下当前源 yarn config get registry 2.切换为淘宝源 yarn config set registry https://registry.npm.taobao.org ...
- elment-ui的validate
https://blog.csdn.net/qq469234155/article/details/84034816 validate()时elment-ui封装好的用于对整个表单进行验证valida ...
- 案例(拖拽对话框、高清放大镜、自制滚动条、元素的隐藏方式、表格隔行变色、tab切换效果、字符串拼接、刷新评论)
一.拖拽对话框 <style> .of{ width: 500px; } #link,#close{ text-decoration: none; margin: 0 10px; font ...
- Codeforces Round #591
目录 Contest Info Solutions A. Save the Nature B. Sequence Sorting C. Paint the Tree D. Stack Extermin ...
- ERROR: node with name "rabbit" already running on "localhost"
rabbitmqctl start_app启动没有这个问题
- [bzoj 4887] [Tjoi2017]可乐
传送门 Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市 ...
- mysql5.7 源码安装步骤
操作系统:centos 7 mysql版本:5.7 下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-gli ...
- zookeeper 随记
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务. zookeeper的几种模式: 1.单点模式 2.分布式集群模式,节点运行在多台机器 3.单点多实例 在这里只介绍单点多实例安装. ...
- [Shell]CVE-2017-8464漏洞复现
0x01 漏洞原理 Windows系统通过解析 .LNK 后缀文件时,是使用二进制来解析的,而当恶意的二进制代码被系统识别执行的时候就可以实现远程代码执行,由于是在explorer.exe进程中运行的 ...
- NLog用法
NLog是什么 NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码.NLog是一个简单灵活的.NET日志记录类库.通过使用NLog,我们可以在任何一种 ...