【学习笔记】[北大集训 2021] 魔塔 OL
看正解代码长度发现还能接受,说明不完全是一道码农题。
对于高维偏序,有一个很离谱的做法,对每一维的所有值域前缀,用 bitset \text{bitset} bitset处理落在这个前缀内的所有点的编号,然后对 bitset \text{bitset} bitset求交就能得到询问点的集合。
注意到贪心的选择顺序是固定的。考虑将怪物按 B = log n B=\log n B=logn分块,然后从前往后处理,预处理出 2 B 2^B 2B种情况对应的信息。当然这里用 bitset \text{bitset} bitset显然很离谱,因为怪物数目不超过 log n \log n logn个所以直接用整数状压即可。
复杂度 O ( n 2 log n ) O(\frac{n^2}{\log n}) O(lognn2)。
#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define inf 0x3f3f3f3f
using namespace std;
int Q,n,m;
ll mn[1<<15],dt[1<<15];
ll sx[10005],sy[10005],sz[10005];
struct monster{int l,r,x,y,z,a,b;bool operator <(const monster &r)const{return max(a,a-b+r.a)<max(r.a,r.a-r.b+a);}
}f[50005];
struct query{ll mn,dt;int p,x,y,z;
}q[50005];
string str;
void solve(int l,int r){int L=r-l+1;for(int i=1;i<1<<L;i++){//fixedint p=31-__builtin_clz(i);dt[i]=dt[i-(1<<p)]+f[l+p].a-f[l+p].b;mn[i]=max(mn[i-(1<<p)],dt[i-(1<<p)]+f[l+p].a);}memset(sx,0,sizeof sx);memset(sy,0,sizeof sy);memset(sz,0,sizeof sz);vector<pair<int,int>>G;for(int i=l;i<=r;i++){sx[f[i].x]|=1<<i-l;sy[f[i].y]|=1<<i-l;sz[f[i].z]|=1<<i-l;G.pb({f[i].l,i});G.pb({f[i].r,i});}sort(G.begin(),G.end());for(int i=2;i<=10000;i++){sx[i]|=sx[i-1];sy[i]|=sy[i-1];sz[i]|=sz[i-1];}int state=0,it=0;for(int i=1;i<=m;i++){while(it<G.size()&&G[it].fi<=q[i].p){state^=1<<G[it].se-l;it++;}int s=state&sx[q[i].x]&sy[q[i].y]&sz[q[i].z];q[i].mn=max(q[i].mn,q[i].dt+mn[s]);q[i].dt+=dt[s];}
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>Q;for(int i=1;i<=Q;i++){cin>>str;if(str[0]=='+'){n++;f[n].l=i;cin>>f[n].x>>f[n].y>>f[n].z>>f[n].a>>f[n].b;}else if(str[0]=='-'){int k;cin>>k;f[k].r=i;}else{m++;q[m].p=i;cin>>q[m].x>>q[m].y>>q[m].z;}}for(int i=1;i<=n;i++)if(!f[i].r)f[i].r=Q+1;sort(f+1,f+1+n);int B=13;for(int i=1;i<=(n-1)/B+1;i++){int l=(i-1)*B+1,r=min(n,i*B);solve(l,r);}for(int i=1;i<=m;i++)cout<<q[i].mn<<"\n";
}
【学习笔记】[北大集训 2021] 魔塔 OL相关推荐
- 【数学建模学习笔记【集训十天】之第六天】
数模学习目录 Matplotlib 学习 Matplotlib简介 Matplotlib 散点图 运行效果如下: Matplotlib Pyplot 运行效果如下: 关于plot() 运行效果如下: ...
- Rabbitmq学习笔记(尚硅谷2021)
Rabbitmq学习笔记 (尚硅谷) 1.MQ 的概念 1.1 什么是 MQ? 1.2 为什么要用 MQ? 削峰 解耦 异步 1.3 MQ 的分类 ActiveMQ Kafka RocketMQ Ra ...
- 最新、最全、最详细的 MySQL 数据库学习笔记总结(2021最新版)
数据库是什么 数据库管理系统,简称为DBMS(Database Management System),是用来存储数据的管理系统. DBMS 的重要性 无法多人共享数据 无法提供操作大量数据所需的格式 ...
- 【学习笔记】李宏毅2021春机器学习课程第三节:卷积神经网络(CNN)
文章目录 1 图像分类问题 2 观察一:通过某些模式来识别 3 简化一:各扫门前雪 3.1 经典的 Receptive Field 设计方式 3.1.1 看所有的 Channel 3.1.2 使用 3 ...
- 最详细的 K8S 学习笔记总结(2021最新版)
虽然 Docker 已经很强大了,但是在实际使用上还是有诸多不便,比如集群管理.资源调度.文件管理等等.那么在这样一个百花齐放的容器时代涌现出了很多解决方案,比如 Mesos.Swarm.Kubern ...
- 墙裂推荐!看完全面掌握,最详细的 Docker 学习笔记总结(2021最新版)
Docker 是什么? Docker 是一个开源的容器引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者和系统管理员在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包 ...
- 【学习笔记】李宏毅2021春机器学习课程第6.2节:生成式对抗网络 GAN(二)
文章目录 1 No pain,no GAN 2 用 GAN 来生成一个 Sequence 3 怎么评估一个 Generator 的好坏 3.1 多样性问题 - Mode Collapse 3.2 多样 ...
- 【学习笔记】李宏毅2021春机器学习课程第6.1节:生成式对抗网络 GAN(一)
文章目录 1 能够作为生成器的神经网络 GAN 2 动漫人物头像生成 3 判别器(Discriminator) 4 从自然选择看GAN的基本思想 5 GAN 的具体实现过程 步骤一: 固定 gener ...
- 【数学建模学习笔记【集训十天】之第四天】
数模学习目录 SciPy 学习 SciPy基本操作 1-求解非线性方程(组) 解题代码如下: 运行x1.x2结果如下: 解题代码如下: 运行s2效果如下: 2-积分 3-最小二乘解 4-最大模特征值及 ...
最新文章
- 前端(移动端)开发利器Chrome Developer Tools秘籍(下)
- php面向对象mysqli,php+mysqli使用面向对象方式更新数据库实例
- 再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)
- 信息系统项目管理师-项目采购管理知识点
- 电子设计竞赛电源题(4)-Buck与Boost电路
- 2021“MINIEYE杯”中国大学生算法设计超级联赛(4)Display Substring(后缀数组+二分)
- mysql慢查询开启语句分析_linux下开启mysql慢查询,分析查询语句
- 行为型模式:解释器模式
- 苹果手机自带表格软件_解决手机系统自带软件无法卸载问题
- Sharepoint 2013默认dll部署位置
- Enterprise Library 4.1 Caching Block 图文笔记
- 今日头条iOS客户端启动速度优化
- @NotEmpty@NotNull和@NotBlank的区别
- 个税倒推收入的计算器_手把手教你做个税计算器(1)
- 小型迷宫实现---迷宫算法(递归回溯法)
- 如何辨别u盘是否为缩水,并恢复u盘真实容量
- [Swust OJ 643]--行列式的计算(上三角行列式变换)
- grafana是什么?
- 沟通的艺术(笔记)——前言
- excel 在一列中查找某个值的出现次数 countif函数