首页 > 其他分享 >HH的项链

HH的项链

时间:2024-02-18 22:12:00浏览次数:25  
标签:贝壳 int 整数 HH 项链 物品

题目描述
HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答。。。因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。

输入格式
第一行:一个整数N,表示项链的长度。
第二行:N个整数,表示依次表示项链中贝壳的编号(编号为0到1000000之间的整数)。
第三行:一个整数M,表示HH询问的个数。
接下来M行:每行两个整数,L和R(1 ≤ L ≤ R ≤ N),表示询问的区间。

输出格式
M行,每行一个整数,依次表示询问对应的答案。

样例
样例输入
6
1 2 3 4 3 5
3
1 2
3 5
2 6
样例输出
2
2
4
数据范围与提示 N ≤ 50000,M ≤ 200000

  • 这道题要注意使用离线思想(将所有数据全部读入后统一处理)
  • 定义树状数组只有“0”“1”两个状态表示是否出现
  • 记录上一个和当前物品种类相同的物品在哪里,假如我们统计了当前物品,就把上一个相同种类的物品置 0.
  • 记录每个区间的右端点,并从小到大排序.
  • 取出一个最小的右端点,若当前对物品的遍历到达了这个右端点,那么马上算出答案并存储.
  • 重复上述步骤.
点击查看代码
#include<bits/stdc++.h>
using namespace std;

const int N = 1000001;
int n, m, l, r, a[N], s[N], ans[N], vis[N];
struct tree{
	int l, r, sum;
	bool operator < (const tree &a) const{
		return r < a.r;
	}
}t[N];

int lb(int x){
	return x & -x;
}

void add(int x, int key){
	while(x <= n){
		s[x] += key;
		x += lb(x);
	}
}

int gt(int x){
	int sum = 0;
	while(x){
		sum += s[x];
		x -= lb(x);
	}
	return sum;
}

int main(){
	scanf("%d", &n);
	for(int i=1; i<=n; i++) scanf("%d", &a[i]);
	scanf("%d", &m);
	for(int i=1; i<=m; i++){
		scanf("%d%d", &t[i].l, &t[i].r);
		t[i].sum = i;
	}
	sort(t+1, t+1+m);
	int last = 1;//上次结尾 
	for(int i=1; i<=m; i++){
		for(int j=last; j<=t[i].r; j++){
			if(vis[a[j]]) add(vis[a[j]], -1);//vis数组为一则之前出现过
			add(j, 1);//为0则之前未出现过
			vis[a[j]] = j;
		}
		last = t[i].r + 1;
		ans[t[i].sum] = gt(t[i].r) - gt(t[i].l - 1);
	}
	for(int i=1; i<=m; i++) printf("%d\n", ans[i]);
	return 0;
}

标签:贝壳,int,整数,HH,项链,物品
From: https://www.cnblogs.com/w1210323/p/18020036

相关文章

  • HH的项链
    题目描述HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答。......
  • HH的项链——题解
    题目描述直接求解会导致不同贝壳在上个区间算过但这个区间没标记的情况,所以在求解时要把上个区间的标记转移到这个区间转移前先右边界由小到大排序,然后转移上个右边界到这个右边界的标记,同时记录上个标记出现的地方,方便转移下面附代码solution#include<bits/stdc++.h>using......
  • HH的项链 题解
    题目描述HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答。。......
  • 珍珠项链
    这道题目看到\(N\)这么大,就不用想组合数学了,一般都是递推+矩阵快速幂设\(f[i][j]\)表示用\(i\)种珍珠构成长度为\(j\)的项链的种数由于矩阵快速幂要求向量长度不长但是变化时间很长,所以这里我们要把\(i\)作为向量长度,\(j\)作为变化时间,所以要考虑最后一个珠子是什么(这样递推的时......
  • [SDOI2009] HH的项链
    [SDOI2009]HH的项链题目描述HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此,他的项链变得越来越长。 有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同......
  • P1063 [NOIP2006 提高组] 能量项链
    原题链接题解1.拆环成链2.最后一颗留下来的珠子一定是的头标记一定是某个原珠子\(A\)的头标记,尾标记一定是珠子\(A\)右边n个单位的珠子的尾标记3.对任意最大值而言,最后一颗一定是某两个珠子的合并后产生的,所以我们可以在区间内断点遍历\(Code\)#include<bits/stdc++.h>usin......
  • 世界标准时间格式(yyyy-MM-dd'T'HH:mm:ss.SSS Z)处理
    世界标准时间格式(yyyy-MM-dd'T'HH:mm:ss.SSSZ)处理        日前在接收他人传递过来的数据时碰到yyyy-MM-dd’T’HH:mm:ss.SSSZ格式的时间数据,因网上相关处理文档较少,所以特此记录一下我的处理方法以便日后翻阅。publicStringtimeFormat(Stringtime){Stri......
  • Java中SimpleDateFormat时YYYY与yyyy以及HH和hh的区别注意踩坑
    场景Java开发手册中为什么要求SimpleDateFormat时用y表示年,而不能用Y:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131052335在使用SimpleDateFormat在获取当前日期时因使用了YYYY导致20231231这个日期被格式化为20241231这里推荐在日期处理时统一使用封装工具......
  • 【卡梅德生物】纳米抗体(VHH)定制
    纳米抗体,也称为单域抗体或VHHs,是一类由重链抗体(重链仅由单一变量域组成的抗体)中的单一变量域(VH)区域衍生的抗体片段。这些单域抗体最初是从骆驼科动物(如骆驼、羊驼和维库尼亚骆驼)中发现的,它们具有独特的免疫系统,可以产生没有轻链的抗体。纳米抗体的体积小、稳定性高、易于工程化,因此......
  • HHDESK端口转发监控服务获取客户端和数据库之间的交互信息
    1.用户痛点端口转发是一种网络技术,用于将外部网络请求转发到内部网络中的特定设备或服务。它允许通过公共网络访问内部网络中的资源,提供了灵活性和便利性。传统的端口转发方式是通过配置路由器的端口映射,但这需要具备网络知识和一定的技术操作,对于一般用户来说较为繁琐。而HHDESK......