Codeforces 220B

news/2024/7/8 6:43:33 标签: codeforces

codeforces.com/problemset/problem/220/B" rel="nofollow">传送门

题目大意

给出一个长度为 n n n的序列,进行 m m m次询问。

每次询问区间 [ l , r ] [l,r] [l,r]内,有多少个数字 x x x刚好出现了 x x x次。

思路

枚举右端点 r r r,维护左端点 l l l,设法将 s u m ( l , r ) s u m ( l , r ) sum(l,r) 表示为区间内的合法数字个数

所以以区间 [ 2 , 2 , 2 , 2 ] [ 2 , 2 , 2 , 2 ] [2,2,2,2]为例:

  1. r = 1 r = 1 r=1,左端点的贡献分别为: [ 0 , 0 , 0 , 0 ] [ 0 , 0 , 0 , 0 ] [0,0,0,0];
  2. r = 2 r = 2 r=2,左端点的贡献分别为: [ 1 , 0 , 0 , 0 ] [ 1 , 0 , 0 , 0 ] [1,0,0,0];
  3. r = 3 r = 3 r=3,左端点的贡献分别为: [ − 1 , 1 , 0 , 0 ] [ − 1 , 1 , 0 , 0 ] [1,1,0,0];
  4. r = 4 r = 4 r=4,左端点的贡献分别为: [ 0 , − 1 , 1 , 0 ] [ 0 , − 1 , 1 , 0 ] [0,1,1,0];

所以可以看出规律,只需要维护上述规律即可将贡献维护成前缀和。

代码



typedef pair<ll, ll>PLL;
typedef pair<int, int>PII;
int a[maxn],n,m,ans[maxn],tr[maxn];
vector<PII>q[maxn];
vector<int>g[maxn];

int lowbit(int x){
	return x&-x;
}
void update(int pos,int val){
	while(pos<=n){
		tr[pos]+=val;pos+=lowbit(pos);
	}
}
int query(int pos){
	int res=0;
	while(pos){
		res+=tr[pos];pos-=lowbit(pos);
	}
	return res;
}

int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=m;i++){
		int l,r;
		cin>>l>>r;
		q[r].push_back({l,i});
	}
	for(int i=1;i<=n;i++){
		int x=a[i];
		if(x<=n){
			g[x].push_back(i);
			int siz=g[x].size();
			if(siz>=x){
				update(g[x][siz-x],1);
				if(siz-x-1>=0) update(g[x][siz-x-1],-2);
				if(siz-x-2>=0) update(g[x][siz-x-2],1);
			}
		}
		for(int j=0;j<q[i].size();j++){
			PII t=q[i][j];
			int l=t.first,id=t.second;
			ans[id]=query(i)-query(l-1);
		}
	}
	for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
	return 0;
}


http://www.niftyadmin.cn/n/5536613.html

相关文章

Kafka 入门指南

Kafka 入门指南 简介 Kafka 是一个由 Apache 软件基金会开发的开源流处理平台。它最初由 LinkedIn 开发&#xff0c;并在 2011 年作为开源项目发布。Kafka 是一个分布式、可扩展、高吞吐量的消息队列系统&#xff0c;广泛应用于实时数据流处理场景。 主要概念 1. 主题 (Top…

51单片机嵌入式开发:STC89C52环境配置到点亮LED

STC89C52环境配置到点亮LED 1 环境配置1.1 硬件环境1.2 编译环境1.3 烧录环境 2 工程配置2.1 工程框架2.2 工程创建2.3 参数配置 3 点亮一个LED3.1 原理图解读3.2 代码配置3.3 演示 4 总结 1 环境配置 1.1 硬件环境 硬件环境采用“华晴电子”的MINIEL-89C开发板&#xff0c;这…

高级Redis之HyperLogLog的用法示例

HyperLogLog是 Redis 提供的一种基数估计算法数据结构&#xff0c;主要用于估算不重复元素的数量。它能够在使用非常少的内存空间的情况下&#xff0c;快速和高效地进行去重计数操作。HyperLogLog 的误差率约为 0.81%&#xff0c;在处理大数据量的场景下非常有用。 例如使用 R…

大数据面试题之Flume

目录 介绍下Flume Flume架构 Flume有哪些Source 说下Flume事务机制 介绍下Flume采集数据的原理&#xff1f;底层实现&#xff1f; Flume如何保证数据的可靠性 Flume传输数据时如何保证数据一致性&#xff08;可靠性&#xff09; Flume拦截器 如何监控消费型Flu…

EasyBoss ERP移动端上线数据分析模块,随时查Shopee/TikTok本土店数据

前段时间&#xff0c;EasyBoss ERP出了个超酷炫的数字大屏功能&#xff0c;广受好评。 但是也有老板说&#xff0c;电脑端看数据不够方便啊&#xff0c;你们EasyBoss有本事上个手机就能看数据的功能啊&#xff01; 说干就干&#xff0c;直接满足你们的需求&#xff01; 于是在…

mapper.xml 文件对应的 Dao 接口原理

在 Java 框架如 MyBatis 中&#xff0c;Mapper.xml 文件是用于定义 SQL 查询的配置文件&#xff0c;而对应的 Dao 接口&#xff08;Mapper 接口&#xff09;则提供了与 XML 文件中的 SQL 查询相对应的方法。这种设计模式使得 Java 代码与 SQL 语句解耦&#xff0c;提高了代码的…

009、MongoDB的分片策略

目录 MongoDB的分片策略:范围分片vs哈希分片 1. 范围分片(Range Sharding) 1.1 工作原理 1.2 优点 1.3 缺点 1.4 研究支持 2. 哈希分片(Hash Sharding) 2.1 工作原理 2.2 优点 2.3 缺点 2.4 研究支持 3. 选择合适的分片策略 4. 实践案例 4.1 电子商务平台 4.2 社…

vue+openlayers之几何图形交互绘制基础与实践

文章目录 1.实现效果2.实现步骤3.示例页面代码3.基本几何图形绘制的关键代码 1.实现效果 绘制点、线、多边形、圆、正方形、长方形 2.实现步骤 引用openlayers开发库。加载天地图wmts瓦片地图。在页面上添加几何图形绘制的功能按钮&#xff0c;使用下拉列表&#xff08;sel…