考场用的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 集合论的更多相关文章

  1. codevs——1019 集合论与图论

    1019 集合论与图论  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 集合论与图论对于小松来说 ...

  2. codevs 1019 集合论与图论

    1019 集合论与图论  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 集合论与图论对于小松来说 ...

  3. hzoj 2301(莫比乌斯反演)

    题意 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公 数. 思路: 与先前的那个相比,这次a,c并不一定 ...

  4. Set 集合论

    https://en.m.wikipedia.org/wiki/De_Morgan%27s_laws https://plato.stanford.edu/entries/set-theory/ ht ...

  5. HZOJ 单

    两个子任务真的是坑……考试的时候想到了60分的算法,然而只拿到了20分(各种沙雕错,没救了……). 算法1: 对于测试点1,直接n遍dfs即可求出答案,复杂度O(n^2),然而还是有好多同学跑LCA/ ...

  6. 20191102 「HZOJ NOIP2019 Round #12」20191102模拟

    先开坑. md原题写挂我也真是... 100+20+10 白夜 打表大法吼 显然,不在环上的点对答案的贡献是 \((k-cycle)^{k-1}\) . 打表得到环上的递推式,矩阵一下乘起来就好了. ...

  7. 20191004 「HZOJ NOIP2019 Round #9」20191004模拟

    综述 第一次 rk1 ,激动. 题目是 COCI 18/19 Round #1 的三至五题. 得分 \(100+100+20\) \(\mathrm{cipele}\) 问题描述 HZOJ1313 题 ...

  8. 20191003 「HZOJ NOIP2019 Round #8」20191003模拟

    综述 试题为常州集训2019SCDay2 得分\(100+30(0)+28\) 时之终结 问题描述 HZOJ1310 题解 构造题. 发现部分分有一档是 \(Y\) 是 \(2^x\) ,于是自然想到 ...

  9. 20190922 「HZOJ NOIP2019 Round #7」20190922模拟

    综述 这次是USACO2019JAN Gold的题目. \(\mathrm{Cow Poetry}\) 题解 因为每句诗的长度一定是\(k\),所以自然而然想到背包. 设\(opt[i][j]\)代表 ...

随机推荐

  1. Linux 系统的运行级别(runlevel)

    Linux 系统有 7 个运行级别,Linux 系统任何时候都运行在一个指定的运行级别上,不同的运行级别所运行的程序和服务不尽相同,所要完成的工作和要达到的目的也不相同 · 运行级别 0 系统停机(h ...

  2. 【vue】/vue-ele-project

    作者大大的地址是:https://github.com/JinwenXie/vue-ele-project 还是老办法,先运行项目看看效果 我不算是外卖爱好者,不过觉得那个添加商品到购物车的动画效果很 ...

  3. vue socketio如何使用及跨域问题

    我的后端使用的flask_socketio做服务端  前端使用的vue_socketio当客户端 vue.config.js配置 module.exports = { outputDir: proce ...

  4. php实现的支持断点续传的文件下载类

    通常来说,php支持断点续传,主要依靠HTTP协议中 header HTTP_RANGE实现. HTTP断点续传原理: Http头 Range.Content-Range()HTTP头中一般断点下载时 ...

  5. 如何修改MyEclipse的SVN账户和密码

    如何修改MyEclipse的SVN账户和密码呢? 操作方法:删除C:\Users\Administrator\AppData\Roaming\Subversion\auth\svn.simple文件夹 ...

  6. wpf绑定元素属性

  7. POJ 3628 Bookshelf 2【背包型DFS/选or不选】

    Bookshelf 2 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11105   Accepted: 4928 Desc ...

  8. 为GitLab配置邮件服务

    修改配置文件:/etc/gitlab/gitlab.rb ####################################################################### ...

  9. day38 05-Spring的BeanFactory与ApplicationContext区别

    ApplicationContext怎么知道它是一个工厂呢? BeanFactory也可以做刚才那些事情,只不过ApplicationContext对它有扩展.ApplicationContext间接 ...

  10. 集训队日常训练20180525-DIV2

    A.2295 求有多少素数对和等于n. 暴力. #include <bits/stdc++.h> using namespace std; int ss(int n) { ,a=sqrt( ...