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 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
随机推荐
- Homestead can not mount nfs on macos catalina
It's not a vagrant issue but nfsd/macos issue.If you add to /etc/exports line:/Users/USERNAME/Docume ...
- Codeforces Global Round 4
目录 Contest Info Solutions A. Prime Minister B. WOW Factor C. Tiles D. Prime Graph E. Archaeology F1. ...
- Poj 2599 Godfather(树的重心)
Godfather Time Limit: 2000MS Memory Limit: 65536K Description Last years Chicago was full of gangste ...
- hive on tez
hive运行模式 hive on mapreduce 离线计算(默认) hive on tez YARN之上支持DAG作业的计算框架 hive on spark 内存计算 hive on tez T ...
- 深入理解JVM虚拟机3:垃圾回收器详解
JVM GC基本原理与GC算法 Java的内存分配与回收全部由JVM垃圾回收进程自动完成.与C语言不同,Java开发者不需要自己编写代码实现垃圾回收.这是Java深受大家欢迎的众多特性之一,能够帮助程 ...
- AOP 与 Spring中AOP使用(上)
AOP简介 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP是OOP的延续 ...
- STM32 + RT Thread OS 串口通讯
1. 创建项目 a) 禁用Finsh和console b) 默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因 ...
- node express返回json数据给前端
请注意,使用res.json()的格式 1.前面不能添加 res.writeHead(200, {'content-type': 'text/plain;charset=utf-8'}); axio ...
- python 设计模式之备忘录模式
1.为什么用备忘录模式 假设大战僵尸游戏共10关,越是往后关卡越难,越难就越是费时间费钱费精力. 开始大战僵尸,玩了好久好久终于玩到了第9关,真是不容易. 这个时候开始玩第9关了,哇,好难啊,真不幸, ...
- [webpack]深入理解proxy代理
1.一个基本的代理 module.exports = { //... devServer: { proxy: { '/api': 'http://localhost:3000' } } }; /api ...