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\)大的元素并删除,在末尾插入一个元 ...
随机推荐
- 「CodePlus 2017 11 月赛」可做题
这种题先二进制拆位,显然改的位置只有每一段确定的数的开头和结尾,只需要对于每一个可决策位置都尝试一下填1和0,然后取min即可. #include<iostream> #include&l ...
- Mobile Service
link 试题分析 我们发现$dp(t,s1,s2,s3)$表示在$t$时刻$3$个人的位置.发现时间复杂度为$O(n \times L^3)$.不仅会$T$还会$MLE$,所以需要优化$dp$.我们 ...
- Linux基础------文件打包解包---tar命令,文件压缩解压---命令gzip,vim编辑器创建和编辑正文件,磁盘分区/格式化,软/硬链接
作业一:1) 将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat /etc/passwd /etc/group > /1.txt2) 将用户信息数据库文件和用户 ...
- c++11变长参数函数模板
By francis_hao Mar 25,2018 一个最简单的实例大概是这个样子: #include <iostream>using namespace std; /*变长参 ...
- Linux下安装python-2.7 先zlib
2018-04-25 发布 Linux下安装python-2.7 python 1.1k 次阅读 · 读完需要 25 分钟 1 安装依赖的库 yum -y install python-deve ...
- JS中的new操作符原理解析
var Person = function(name){ this.name = name; } Person.prototype.sayHello = function() { console.lo ...
- JPA映射持久化对象(Entity)
推荐阅读:JPA criteria 查询:类型安全与面向对象 来源: http://blog.sina.com.cn/s/blog_49fd52cf0100rzjn.html 一个普通的POJO类通过 ...
- @PathParam 和 @QueryParam
今天调试一个上传功能,客户端手持机发送数据,在URL中附加一个参数,后台用@PathParam接收,但是报错,无法获取这个参数. url:http://192.168.1.3/web1_service ...
- HDU6130 签到题 打表
LINK 题意:给出一个描述自身的数列,求出第n项 思路:看了很久题目才看懂..每个值其实是描述一个分组中的个数,把两个数列对照一下就可以了,那么一个指针扫,同时向尾部加数,构造个数组就行了.其实很水 ...
- 2015/9/28 Python基础(19):类的定制和私有性
用特殊方法定制类前面我们讲了方法的两个重要方面:首先,方法必须在调用前被绑定(到它们相应类的某个实例中):其次,有两个特殊方法可以分别作为构造器和解构器的功能,分别名为__init__()和__del ...