abc347E Set Add Query

news/2024/10/8 21:51:40/文章来源:https://www.cnblogs.com/chenfy27/p/18453126

有数组A[N],初始时元素都为0,另外还有初始为空的集合S。依次处理以下Q组查询:给出整数x[i],如果S包含x[i],则从S中移除x[i],否则将x[i]加入S,记此时S的大小为|S|,把|S|加到集合中的每个元素i对应的A[i]中。求最终A[i]是多少。
1<=N,Q<=2E5; 1<=x[i]<=N

分析:记录每个时刻集合S的大小,设元素u在t1时刻加入集合,在t2时刻移出集合,那么[t1,t2)区间各个时刻集合的大小都要加到u对应的答案中,因此用前缀和维护集合大小。

#include <bits/stdc++.h>
using i64 = long long;void solve() {int N, Q;std::cin >> N >> Q;std::vector<i64> A(Q + 1);for (int i = 1; i <= Q; i++) {std::cin >> A[i];}std::set<i64> st;std::vector<i64> cnt(Q + 1);for (int i = 1; i <= Q; i++) {if (st.count(A[i])) {st.erase(A[i]);} else {st.insert(A[i]);}cnt[i] = st.size();}std::partial_sum(cnt.begin(), cnt.end(), cnt.begin());auto sum = [&](int l, int r) {return l <= r ? cnt[r] - cnt[l - 1] : 0;};std::set<int> st1;std::vector<int> lst(Q + 1);std::vector<i64> ans(Q + 1);for (int i = 1; i <= Q; i++) {if (st1.count(A[i])) {ans[A[i]] += sum(lst[A[i]], i - 1);st1.erase(A[i]);} else {st1.insert(A[i]);lst[A[i]] = i;}}for (auto i : st1) {ans[i] += sum(lst[i], Q);}for (int i = 1; i <= N; i++) {std::cout << ans[i] << " \n"[i == N];}
}int main() {std::cin.tie(0)->sync_with_stdio(0);std::cout << std::fixed << std::setprecision(10);int t = 1;while (t--) solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/810215.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学年(2024-2025-3) 学号(20241424)《计算机基础与程序设计》第三周学习总结

学期(2024-2025-3) 学号(20241424) 《计算机基础与程序设计》第三周学习总结 作业信息 |这个作业属于([2024-2025-3-计算机基础与程序设计](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03)| |-- |-- | |这个作业要求在(2024-2025-3计算机基础与程序设计第三周作…

mysql join语法解析

MySQL 支持以下 JOIN 语法用于 SELECT 语句和多表 DELETE 和 UPDATE 语句中的 table_references 部分: table_references: 查询中涉及的一个或多个表的引用,可以是简单表名或 JOIN 表达式的组合。 escaped_table_reference [, escaped_table_reference] ...escaped_table_ref…

Tableau修改行和列的颜色

1.修改颜色 1.1 在列上右键点击设置格式1.2 修改列和角2.逆时针、由里及外依次设置格式在直条上右键

论文《Learning Properties of Ordered and Disordered Materials from Multi-fidelity Data》中的代码实现

github地址:https://github.com/materialsvirtuallab/megnet/tree/master/multifidelity#issues介绍:当前的存储库利用了由同一作者开发的现有MEGNET软件包,并将MEGNET功能扩展到多保真数据集的建模。该存储库将共享公开发布的多保真带隙数据,并展示了运行多保真数据集的模…

Tableau双轴

1.添加度量到行2.添加分类到列3.拖动度量到左侧利润字段处放开

Tableau文本表、直条、散点图、折线图、

1文本表 两次双击选中两个维度2.直条 两次双击依次分别选中一个度量和维度3.散点图 两次双击选中两个度量4.折线图 两次双击依次分别选中一个日期和一个度量

Unity Shader-渲染队列,ZTest,ZWrite,Early-Z

本文介绍了Unity中的渲染队列,包括不透明和半透明物体的渲染顺序,以及如何自定义渲染队列。深度测试(ZTest)和深度写入(ZWrite)的概念被详细解释,同时探讨了Early-Z技术在优化渲染效率中的作用。此外,还提到了Alpha Test在移动设备上的性能问题。 摘要由CSDN通过智能技…

电力系统的负荷损失和潮流计算matlab仿真,对比最高度数,最高介数以及最高关键度等节点攻击

1.课题概述节点攻击是指针对电力系统中某个或多个节点进行的攻击,其目的是破坏电力系统的稳定性和安全性。节点攻击可以分为最高度数攻击、最高介数攻击和最高关键度攻击等。在本课题中,将模拟这四种攻击方式,对比电力系统的停电规模。2.系统仿真结果 3.核心程序与模型 版本…

CMake 属性之目标属性

CMake 可以通过属性来存储信息。它就像是一个变量,但它被附加到一些其他的实体上,像是一个目录或者是一个目标。例如一个全局的属性可以是一个有用的非缓存的全局变量。 在 CMake 的众多属性中,目标属性 ( Target Properties ) 扮演着尤为重要的角色,它们直接关联到最终生成…

模板测试

模板测试(Stencil Test)是3D渲染中的一种技术,它根据预设条件比较参考值与模板缓冲区的值来决定片段是否进行下一步深度测试。本文介绍了模板测试的条件判断公式、语法,包括命令、比较函数,以及更新操作的各种关键字,如Keep、Zero等。并通过穿透效果的例子展示了模板测试…

CH57X/CH58X/CH59X 加PA应用

一、前言在有些时候产品需要做到更远的距离在原来的基础上加上PA放大芯片来实现广播或者连接距离上的提升。 PA是Power Amplifier的简称,中文名称为功率放大器,简称“功放”,指在给定失真率条件下,能产生最大功率输出以驱动某一负载的放大器。对于射频通信系统,PA负责发射通道…