HZOJ 集合论
考场用的set,代码复杂度很低,时间复杂度$O(sum log)$,一发过了大样例,以为1e6的数据很稳了就没再管(然后就挂掉了……)
考后把set化成unordered_set就A了。其实$sum log$的时间复杂度是没有什么问题,只不过有个细节没有考虑好,考场上以为set赋值和clear的复杂度是O1的,然后就挂掉了。
其实用unordered_set复杂度也不是很对,瓶颈在于赋值和清空。
题解:
考虑用set s维护,顺便用一个变量sum维护set中数据的和。
对于操作1;考虑B集合中的变量a,在s中find(a),若不存在,插入,sum+=a;
对于操作2:sum=0。考虑B集合中的变量a,在s中find(a),若存在,在另外一个set s1插入a,sum+=a。s=s1,s1.clear()。本人死于此。
对于操作3,4:对于s中每个数都进行操作显然不可行,那么考虑用一个变量cal维护整体变化值,只需要给操作1,2的a减cal再进行操作即可。
之后考虑怎么不用set实现:
我们并不要求数据有序,显然可以用unordered_set,但是其实可以用常数更小的Hash_map实现。
之后考虑之前的赋值和清空操作:记录一个时间戳即可。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<unordered_set>
#define LL long long
using namespace std;
char xch,xB[1<<15],*xS=xB,*xTT=xB;
#define getc() (xS==xTT&&(xTT=(xS=xB)+fread(xB,1,1<<15,stdin),xS==xTT)?0:*xS++)
int m; LL cal=0,sum;
unordered_set<int>s,s1;
#define IT set<int>::iterator
inline int read();
signed main()
{
// freopen("ex_jihe4.in","r",stdin);
// freopen("11.out","w",stdout); m=read();int opt;
for(int i=1;i<=m;i++)
{
opt=read();
if(opt==1)
{
int siz=read(),a;
for(int j=1;j<=siz;j++)
{
a=read();a-=cal;
if(s.find(a)==s.end())s.insert(a),sum+=a;
}
}
if(opt==2)
{
int siz=read(),a;sum=0;
for(int j=1;j<=siz;j++)
{
a=read();a-=cal;
if(s.find(a)!=s.end())s1.insert(a),sum+=a;
}
s=s1;s1.clear();
}
if(opt==3)
{
if(!s.empty())cal++;
}
if(opt==4)
{
if(!s.empty())cal--;
}
printf("%lld\n",sum+cal*s.size());
}
}
inline int read()
{
int x=0,f=1;char ch=getc();
while(ch<'0'|ch>'9'){if(ch=='-')f=-1;ch=getc();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getc();}
return x*f;
}
HZOJ 集合论的更多相关文章
- codevs——1019 集合论与图论
1019 集合论与图论 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 集合论与图论对于小松来说 ...
- codevs 1019 集合论与图论
1019 集合论与图论 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 集合论与图论对于小松来说 ...
- hzoj 2301(莫比乌斯反演)
题意 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公 数. 思路: 与先前的那个相比,这次a,c并不一定 ...
- Set 集合论
https://en.m.wikipedia.org/wiki/De_Morgan%27s_laws https://plato.stanford.edu/entries/set-theory/ ht ...
- HZOJ 单
两个子任务真的是坑……考试的时候想到了60分的算法,然而只拿到了20分(各种沙雕错,没救了……). 算法1: 对于测试点1,直接n遍dfs即可求出答案,复杂度O(n^2),然而还是有好多同学跑LCA/ ...
- 20191102 「HZOJ NOIP2019 Round #12」20191102模拟
先开坑. md原题写挂我也真是... 100+20+10 白夜 打表大法吼 显然,不在环上的点对答案的贡献是 \((k-cycle)^{k-1}\) . 打表得到环上的递推式,矩阵一下乘起来就好了. ...
- 20191004 「HZOJ NOIP2019 Round #9」20191004模拟
综述 第一次 rk1 ,激动. 题目是 COCI 18/19 Round #1 的三至五题. 得分 \(100+100+20\) \(\mathrm{cipele}\) 问题描述 HZOJ1313 题 ...
- 20191003 「HZOJ NOIP2019 Round #8」20191003模拟
综述 试题为常州集训2019SCDay2 得分\(100+30(0)+28\) 时之终结 问题描述 HZOJ1310 题解 构造题. 发现部分分有一档是 \(Y\) 是 \(2^x\) ,于是自然想到 ...
- 20190922 「HZOJ NOIP2019 Round #7」20190922模拟
综述 这次是USACO2019JAN Gold的题目. \(\mathrm{Cow Poetry}\) 题解 因为每句诗的长度一定是\(k\),所以自然而然想到背包. 设\(opt[i][j]\)代表 ...
随机推荐
- windows console 控制台自启动
var fileName = Assembly.GetExecutingAssembly().Location; System.Diagnostics.Process.Start(fileName);
- 再也不怕数据丢失!阿里云RDS MySQL 8.0上线回收站功能
背景 MySQL 在生产环境使用过程中,会伴随着开发和运维人员的误操作,比如 DROP TABLE / DATABASE,这类 DDL 语句不具有可操作的回滚特性,而导致数据丢失,AliSQL 8.0 ...
- 使用nodejs安装http-server
一.下载nodejs(https://nodejs.org/) 二.在环境变量中配置nodejs路径: path: D:\Program\nodejs\ 三.打开终端: 使用node -v测试node ...
- []==![] 为什么等于true?
最近碰到这样一个问题: []==![] 为什么等于true? 首先分析 !的优先级较==高,先运算==两侧的操作数: typeof []; //"object" typeof ...
- 20190809-RP?不存在的
火苗静静的将世界荡涤. ??? 毁灭它,点亮它. 只发光不放热? 那是虚无, ……还有你我的遗言. 考试过程. 通看三题. 额嗯嗯,没想法. T1写个暴力吧. T2好像挺简单. T3好像还行?? T1 ...
- request.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");不加这句话时,从input控件得到值要用new String(request.getParameter( ...
- 未压缩的jQuery
/*! * jQuery JavaScript Library v3.4.1 * https://jquery.com/ * * Includes Sizzle.js * https://sizzle ...
- IbatchBolt和BaseTransactionalBolt区别
void prepare(java.util.Map conf, TopologyContext context, BatchOutputCollector collector, T id) T id ...
- Leetcode643.Maximum Average Subarray I子数组的最大平均数1
给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. 示例 1: 输入: [1,12,-5,-6,50,3], k = 4 输出: 12.75 解释: 最大平均数 (12- ...
- Vue--由自动获取焦点引出的DOM、mounted、自定义指令
一.自动获取焦点的DOM实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...