P3960 列队
这是NOIP 2017最后一道题
不知道这道题有没有人代码写的和我一样麻烦.
Solution
30分暴力
维护每行每列的元素.
每次删除一个元素的时候, 需要修改一行一列
因此复杂度上界\(O(nmq)\).
50分链表
因为查询操作比较少
然后又需要支持快速删除一个数的操作.
显然可以用链表来处理.
具体一点就似乎
70分线段树
这20分的部分分来自于队伍只有一行的情况.
这个做法是比较重要的吧!
应该是100分做法的基础.
用线段树维护队列前m-1个位置.
这个位置有人记为1, 没人记为0, 那么线段树上二分第一个\(s_i=x\)的位置, 这个地方类似于主席树吧!
100分动态开点线段树
发现如果按上面70分的做法开n + 1颗线段树分别维护每一行的前 m - 1个元素和最后一列.
这样做的话, 肯定会超过空间限制的.
但是发现一共修改q次的话线段树没必要每个节点都开.
所以正解大概就是这样的呀.
我不知道我是咋写的反正出来好多细节
因为考虑的比较周到加上70分做法的基础
大概是写对了
不过有一个不知道该如何处理的问题
就是我每颗线段树开节点都是\(2 ( m - 1)\), 也就是说如果修改都在一行内进行并且q大于m的话, 我是处理不了的
70分做法也有这样的问题, 不过不是动态开节点的话就随便处理一下就OK了.
这个如果严格的按照m - 1 + q开节点的话, 比较难办.
所以我的解决方案是第一行的线段树建\(2q\)个节点, 再把第\(m-q\)个节点暴力修改就OK了.
如果有人有更好的解决方案, 请多多指教.
Code
指针警告!
我一般不会刻意卡常, 写的开心就好.(不需要卡常呀) 所以很慢.
根据以往卡常的经验, 开内存池, 使用正确的long long
姿势, 读入优化等常规优化应该能快一点.
50分
70分
90分
100分
P3960 列队的更多相关文章
- 洛谷 P3960 列队 解题报告
P3960 列队 题目描述 \(Sylvia\)是一个热爱学习的女♂孩子. 前段时间,\(Sylvia\)参加了学校的军训.众所周知,军训的时候需要站方阵. \(Sylvia\)所在的方阵中有\(n ...
- Luogu P3960 列队(动态开点线段树)
P3960 列队 题意 题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有\(n \times m ...
- LOJ P3960 列队 树状数组 vector
https://www.luogu.org/problemnew/show/P3960 树状数组预处理之后直接搞就可以了,也不是很好解释,反正就是一个模拟过程的暴力用树状数组维护,还挺巧妙的. 我为什 ...
- 洛谷 P3960 列队
https://www.luogu.org/problemnew/show/P3960 常数超大的treap #pragma GCC optimize("Ofast") #incl ...
- [LUOGU] [NOIP2017] P3960 列队
题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n \times mn×m 名学生,方阵的行 ...
- luogu P3960 列队
传送门 因为\(Splay\)可以\(O(logn)\)维护区间,所以直接对每一行维护第一个元素到倒数第二个元素的\(Splay\),最后一列维护一个\(Splay\),每次把选出来的点删掉,然后把那 ...
- 洛谷P3960 列队 NOIp2017 线段树/树状数组/splay
正解:动态开点线段树 解题报告: 传送门! 因为最近学主席树的时候顺便get到了动态开点线段树?刚好想起来很久很久以前就想做结果一直麻油做的这题,,,所以就做下好了QAQ 然后说下,这题有很多种方法, ...
- 洛谷P3960 列队(NOIP2017)(Splay)
洛谷题目传送门 最弱的Splay...... 暴力模拟30分(NOIP2017实际得分,因为那时连Splay都不会)...... 发现只是一个点从序列里搬到了另一个位置,其它点的相对位置都没变,可以想 ...
- 洛谷P3960 列队(动态开节点线段树)
题意 题目链接 Sol 看不懂splay..,看不懂树状数组... 只会暴力动态开节点线段树 观察之后不难发现,我们对于行和列需要支持的操作都是相同的:找到第\(k\)大的元素并删除,在末尾插入一个元 ...
随机推荐
- open_basedir restriction in effect的错误及其解决办法
问题是出现在了PHP.INI上面了 原因是php.ini里设置了 opendir=/var/web/w0895/:/tmp:/usr/lib/php 解答: 其实open_basedir ...
- 【bzoj4543】Hotel加强版(thr)
Portal --> bzoj4543 Solution 一年前的题== 然而一年前我大概是在划水qwq 其实感觉好像关键是..设一个好的状态?然后..你要用一种十分优秀的方式快乐转移 ...
- C++之智能指针20170920
/*************************************************************************************************** ...
- Linux之Libcurl库的介绍与应用20170509
一.LibCurl简介 LibCurl是免费的客户端URL传输库,支持FTP,FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE ,LDAP等 ...
- 根据数据库连接的java.sql.Connection获取数据库名称
// 获取数据库的元数据信息 DatabaseMetaData metaData = conn.getMetaData(); // 获取数据库名称的方法 System.out.println(meta ...
- Extjs treePanel过滤查询功能【转】
Extjs4.2中,对于treeStore中未实现filterBy函数进行实现,treestore并未继承与Ext.data.Store,对于treePanel的过滤查询功能,可有以下两种实现思路: ...
- 给深度学习入门者的Python快速教程 - 基础篇(转)
原文:https://zhuanlan.zhihu.com/p/24162430 5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5. ...
- Codeforces Round #298 (Div. 2)A B C D
A. Exam time limit per test 1 second memory limit per test 256 megabytes input standard input output ...
- mysql命令修改登录用户密码
方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password(‘新密码’); 例子:my ...
- zlib解压缩gzip
zlib是个著名的开源解压缩库,gzip是一种压缩文件格式. zlib可以压缩原始数据并输出gzip文件,gzip文件中除了压缩数据外,还有描述这些数据的文件头,所以当原始数据较小时,会出现zlib的 ...