考场用的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. Java 8 的新特性和Java 的4种引用方式

    一.接口的增强 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下: interface Formula { double ca ...

  2. MySQL系列(十)--用户权限及远程访问

    本文基于MySQL8.0,记录一下完整的远程访问的过程,以及这个过程中可能遇到的问题,MySQL运行在阿里云服务器,操作系统:CentOS 7.6 64位 顺便说下,买服务器还是要双十二这种拉新活动再 ...

  3. 基于jquery鼠标或者移动端滚动加载数据

    基于jquery鼠标或者移动端滚动加载数据 var stop = true; // 防止重复请求数据 $(window).scroll(function () { totalheight = pars ...

  4. Tomcat服务启动,项目链接没反应

    该原因是因为tomcat的服务已启动,未停止又重新启动项目造成:只要停止服务,再次重新启动即可

  5. mysql 常用命令语法

    登录到mysql client 以windows下为例,打开cmd命令窗口,进入到mysql安装目录bin目录下,首先要启动mysql服务,执行命令: net start mysql,这里不需要分号. ...

  6. Oracle启动和禁用约束及删除违反约束的记录

    一.禁用约束 alter table table_name disable novalidate constraint constraint_name 二.批量导入数据 三.在开启约束之前一定要检查违 ...

  7. linux交换两个文件的文件名

  8. webpack--安装,使用

    1. webpack 1.1. webpack介绍 webpack是一个资源的打包工具,目前最新为webpack3,可以将 .js, .css , image等静态资源当做一个模块来进行打包,那么每一 ...

  9. PyCharm如何删除工程项目

    1.在菜单中选择:file——>close project 2.选择需要删除的项目右上角的“×”号进行删除工程项目 3.找到工程项目的存放路径,删除对应的工程项目文件 通过上诉操作即可在pych ...

  10. Linux iptables开放特定端口

    如果系统已安装则调过安装步骤 查找安装包 yum list | grep iptables 安装iptables yum install iptables-services 重启防火墙使配置文件生效 ...