当前位置: 首页 > news >正文

P4113 [HEOI2012] 采花 题解

一、题目大意

给你一个长度为 \(n\) 的颜色序列和 \(m\) 个询问,求每个询问区间中出现 \(2\) 次及以上的颜色种类数。

二、解题思路

我们仿照HH的项链一题的思路,设 \(pre_i\) 表示第 \(i\) 个点前面首个与 i 颜色相同的点的编号,\(end_i\) 表示第 \(i\) 个点后面首个与 i 颜色相同的点的编号。

然后定义一个点 i 在区间询问 [l,r] 中有贡献的条件为:

  1. prei 》= l(满足”出现 \(2\) 次及以上“的条件)
  2. i 为满足 1 条件的所有元素中下标最小的一个。(这样答案就保证是种类数

这样问题就转化为了:求询问区间中有贡献的点的个数是多少。

根据上面的条件,再想到题目中是多组区间询问,于是使用离线二维数点来解决。

三、具体方法

使用树状数组维护,将有贡献的点标为 1,无贡献的点标为 0。

  1. 将询问离线,并从左到右遍历序列。
  2. 如果遇到左端点,算出左端点所对应的区间的总和(等价于有贡献的点的数量)。
  3. 每离开一个点,就将 end【i】标为 0,将 end【end【i】】标为 1(具体解释见下)。

四、对于第 3 点的解释

五、AC 代码

点击查看 AC 代码
#include <bits/stdc++.h>
using namespace std;const int N = 2e6 + 10;struct node{int id,num;
};vector<node> g[N];
int n,c,m,l,r,a[N],k[N],tr[N],num[N],ans[N];void add(int x,int c){for(;x <= n;x += x & (-x)) tr[x] += c;
}int sum(int x){int res = 0;for(;x > 0;x -= x & (-x)) res += tr[x];return res;
}int main(){scanf("%d %d %d",&n,&c,&m);for(int i = 1;i <= n;i++)scanf("%d",&a[i]);for(int i = n;i >= 1;i--)k[i] = num[a[i]],num[a[i]] = i;for(int i = 1;i <= m;i++){scanf("%d %d",&l,&r);g[l].push_back(node{i,r});}for(int i = 1;i <= c;i++)if(k[num[i]]) add(k[num[i]],1);for(int i = 1;i <= n;i++){for(node j : g[i])ans[j.id] += sum(j.num) - sum(i - 1);if(k[i]) add(k[i],-1);if(k[k[i]]) add(k[k[i]],1);}for(int i = 1;i <= m;i++)printf("%d\n",ans[i]);return 0;
}
http://www.jsqmd.com/news/330933/

相关文章:

  • 笔记01:当IT系统“雪崩”,没有一片生意雪花是无辜的
  • CSS3 多媒体查询实例
  • 实测微信立减金回收平台,京顺回收高效变现
  • 笔记02:快消公司的赚钱公式:你写的每一行代码,都在利润表上哪个位置?
  • 今日所为
  • Spring 核心原理深度解析:Bean 作用域、生命周期与 Spring Boot 自动配置
  • 宏智树 AI:破解论文降重 + 去 AIGC 痕迹双难题,学术写作不踩坑!
  • Webpack的常用概念和基本配置
  • 测试文件所使用的依赖
  • 位运算---LC371两整数之和
  • 宏智树 AI:把期刊论文写作变成 “按图索骥”,新手也能精准踩中录用要点
  • SSM毕设项目:基于SSM的学生选课管理系统(源码+文档,讲解、调试运行,定制等)
  • Spring Boot 与数据源的集成
  • jQuery Mobile 表单选择
  • 【毕业设计】基于SSM的学生选课管理系统(源码+文档+远程调试,全bao定制等)
  • 宏智树 AI:3 类学术 PPT 零门槛!开题、答辩、汇报 30 分钟搞定
  • Spring Boot 的安全机制
  • 古文观芷App搜索方案深度解析:打造极致性能的古文搜索引擎
  • 为什么懂开发的UI设计公司更容易成功?
  • jQuery Mobile 按钮:全面解析与最佳实践
  • Python 学习资源汇总手册
  • 【笔记】【筹码分布图】
  • 医疗连续体机器人模块化控制界面设计(2025年更新版Python库) - 实践
  • AI大模型基于LangChain 进行RAG与Agent智能体开发
  • ScalingLaws-2022-Chinchilla-2:既然Dₒₚₜ/Nₒₚₜ≈20,为什么LLaMA系列用的D/N远大于20【Chinchilla比例:每个参数大约对应20个token】
  • 汉中火锅串串聚餐首选|把把赢火锅串串,24小时鲜货不停歇
  • 开题报告 雅韵古诗词系统python爬虫
  • 《提示工程架构师:开启Agentic AI创新价值宝库的钥匙》
  • 完整教程:程序员技术成长导航,专栏汇总
  • 开发一个Android App: 打牌计分器