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\)大的元素并删除,在末尾插入一个元 ...
随机推荐
- BZOJ4152:[AMPPZ2014]The Captain——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4152 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1 ...
- android lib 存储
存储在 /data/app-lib目录下:
- 关于使用EmguCV出现 “无法加载 DLL“cvextern”: 找不到指定的程序” 的解决方法
http://blog.csdn.net/cdjcong/article/details/8444191 查找了网上的一些说法,都是说没有设置好路径,或者未将DLL文件复制到Debug文件夹下,但是我 ...
- Httpclient与RestTemplate的比较(比httpClient更优雅的Restful URL访问)
一.HttpClient (一)HttpClient 客户端 1.HttpClient 是 apache 的开源,需要引入两个包:httpclient-4.2.4.jar 和 httpcore-4.2 ...
- python中如何优雅续行和换行
http://note.youdao.com/noteshare?id=8dbcb93991a89a6cfcd95580ed2198f0
- 题解 P4092 【[HEOI2016/TJOI2016]树】
参考了皎月半洒花的博客 看到树想到树剖,由于要取距自己到根离自己最近的标记点,刚开始想到线段树里存节点深度,查询时返回最大值.但是这样的话只能得到节点深度,无法得知节点编号,就想倍增乱搞一下,求出标记 ...
- Mac环境下SVN的配置和使用
简单记录一下在Mac环境下,SVN的配置步骤和使用相关.(Mac自带了svn的服务器和客户端功能,简单配置一下即可使用) 一.SVN的配置方法 1. 创建一个仓库目录,比如在/Users/你的用户名 ...
- 对拍 bat
:loop maker.exe std.exe my.exe fc std.out my.out goto loop pause
- [数据库中间件]将用户添加到DB2组授权
1.将用户oracle添加到db2的用户组中,命令如下: usermod -a -G db2iam #将用户添加到组中并不改变当前所属组 注:以下与主题无关,只是列举一些关于用户的命令 id user ...
- [php]php错误处理机制
1.判断文件是否存在,file_exists("文件名") or die("no such file");2.set_error_hanlder("错 ...